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.