C++ tablice znaków - string

int rozmiar(char *tablica)

{ 

    int i=0;

    while ((tablica[i]) != '\0')

    i++;

    return i;

}

main ()

{

cout <<"Podaj napis: "<< endl; // np.: mamama

char napis[0];

cin >> napis;

cout << napis; // wyświetli napis: mamama

cout << rozm=rozmiar(napis); // wyświetli: 6

cout<
}



Mam pytanie dotyczące tego kodu z mojego programu. Dlaczego deklarując tablicę o rozmiarze 0, sizeof od napisu jest równy 0 a tablica ta przechowuje wpisany dowolny napis. Czy można robić operacje tak jak na każdej innej tablicy? Wkrótce spytam wykładowcę, aczkolwiek tutaj liczę na szybszą odpowiedź.

pozdrawiam

To nie jest poprawny kod, zapisujesz coś w tablicy która mieści 0 elementów - jaka w tym logika? Ja dostaję segmentation fault. Natomiast jeżeli ustawisz tablicę na np. 100 dostaniesz:

rozmiar(napis) // 6 - liczba liter, bo zlicza je twoja funkcja

sizeof(napis) // 100 bo to jest 100-elementowa tablica. sizeof nie interesuje co w niej jest, tylko ile pamięci zajmuje

Do wczytywania niewiadomej liczby znaków lepiej używać klasy stirng, jest to wygodniejsze.

do sprawdzenia dlugosci napisu zapisanego w tablicy charow najlepsza jest funkcja strlen z biblioteki standardowej (plik )

co do wczytywania do tablicy o zerowym rozmiarze: to samobójstwo, nigdy nie wiesz co sie moze stac i w tym miejscu faktycznie najlepiej uzyc klasy string jest mila, przyjemna i bardzo pomocna.

Zapoznaj się z klasą string - nowa, wygodna funkcjonalność wprowadzona przez standard ANSI/ISO.