C++ tablice znaków - string


(Elk2000) #1
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

(Sawyer47) #2

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.


(Cieplok) #3

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.


(Djanocha) #4

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