PDA

Visualizza la versione completa : strlen c++


isolaflo
03-02-2010, 12:45
Ciao a tutti!

Ho 2 quesiti correlati.

1) La funzione strlen mi d la lunghezza della stringa passata come parametro. Ma contando anche il teminatore di stringa oppure no?

ho fatto questa prova:



char stringa [10];
cout<<"scrivi una frase"<<endl;
cin.getline (stringa,10);
cout<<"la lunghezza della stringa e': " << strlen(stringa);


inserendo una stringa di 10 caratteri per esempio 1234567890

la funzione strlen mi dice che la stringa ha lunghezza 9.

Perche'?

cin.getline (stringa,10); non dovrebbe leggere 10 caratteri e quindi poi la funzione strlen dirmi che la lunghezza e' 10?

2) Dubbio sorto dal primo.
Se dichiaro:

char stringa [10];

significa che ho 10 posizioni libere + 1 per il terminatore di stringa \0?
oppure che ne ho 9 libere e la decima per il terminatore di stringa \0?

Grazie in anticipo.

oregon
03-02-2010, 13:02
Originariamente inviato da isolaflo
char stringa [10];

...

la funzione strlen mi dice che la stringa ha lunghezza 9.

Perche'?


Perch prevedi 10 caratteri nella stringa, quindi 9+1 contando il terminatore.

La strlen non comprende mai il terminatore.




2) Dubbio sorto dal primo.
Se dichiaro:

char stringa [10];

significa che ho 10 posizioni libere + 1 per il terminatore di stringa \0?
oppure che ne ho 9 libere e la decima per il terminatore di stringa \0?


9 libere

isolaflo
03-02-2010, 13:12
ok.
quindi se metto:




char stringa [11];
cout<<"scrivi una frase"<<endl;
cin.getline (stringa,10);
cout<<"la lunghezza della stringa e': " << strlen(stringa);



leggo 10 caratteri dalla stringa, ma la strlen mi d lunghezza ancora di 9.
E' perche' quando scrivo cin.getline (stringa,10); mi prende 9 posizioni e la decima ci mette automaticamente il terminatore di stringa, giusto?

oregon
03-02-2010, 13:14
Esatto .... indica 11 nella getline

isolaflo
03-02-2010, 13:15
grazie mille!!! era un dubbio che non mi lasciava in pace!!!
Thanks so much!

oregon
03-02-2010, 13:18
Originariamente inviato da isolaflo
grazie mille!!! era un dubbio che non mi lasciava in pace!!!
Thanks so much!

Prego ... anche se tutto ben spiegato nella documentazione ...

Loading