La stringa sottostante conterrà il terminatore nullo "\ 0"?
std::string temp = "hello whats up";
Grazie! :)
La stringa sottostante conterrà il terminatore nullo "\ 0"?
std::string temp = "hello whats up";
Grazie! :)
Risposte:
No, ma se dici che temp.c_str()un terminatore nullo sarà incluso nel ritorno da questo metodo.
Vale anche la pena dire che puoi includere un carattere null in una stringa proprio come qualsiasi altro carattere.
string s("hello");
cout << s.size() << ' ';
s[1] = '\0';
cout << s.size() << '\n';
stampe
5 5
e non 5 1come ci si potrebbe aspettare se i caratteri nulli avessero un significato speciale per le stringhe.
temp.c_str()il carattere nullo verrà incluso. Se ne hai davvero bisogno nella stringa aggiungilo come qualsiasi altro carattere. temp.push_back('\0'). Ora temp.c_str()includerà due caratteri nulli.
Non in C ++ 03, e non è nemmeno garantito prima di C ++ 11 che in un C ++ std :: string sia continuo in memoria. Solo le stringhe C (array di caratteri destinati alla memorizzazione di stringhe) avevano il terminatore null.
In C ++ 11 e versioni successive, mystring.c_str()è equivalente a mystring.data()è equivalente a &mystring[0]ed mystring[mystring.size()]è garantito che sia '\0'.
Questo dipende dalla tua definizione di "contiene" qui. In
std::string temp = "hello whats up";
ci sono poche cose da notare:
temp.size()restituirà il numero di caratteri dal primo hall'ultimo p(entrambi inclusi)temp.c_str()o temp.data()tornerà con un nullterminatoreint(temp[temp.size()])sarà zeroLo so, io suono simile ad alcune delle risposte qui, ma voglio sottolineare che sizedi std::stringa C++è mantenuta separatamente e non è come in Cdove si tiene il conteggio a meno che non si trova il primo nullTerminator.
Per aggiungere, la storia sarebbe leggermente diversa se string literalcontenesse incorporata \0. In questo caso, la costruzione di si std::stringferma al primo nullcarattere, come segue:
std::string s1 = "ab\0\0cd"; // s1 contains "ab", using string literal
std::string s2{"ab\0\0cd", 6}; // s2 contains "ab\0\0cd", using different ctr
std::string s3 = "ab\0\0cd"s; // s3 contains "ab\0\0cd", using ""s operator
Riferimenti:
Sì, se chiami temp.c_str(), restituirà una stringa c con terminazione null.
Tuttavia, i dati effettivi memorizzati nell'oggetto temppotrebbero non essere terminati da null, ma non importa e non dovrebbe importare al programmatore, perché quando poi il programmatore lo desidera const char*, chiamerebbe c_str()l'oggetto, che è garantito per restituire null -tringa terminata.
temp.size().
std::stringmantiene internamente un conteggio del numero di caratteri. Internamente funziona utilizzando questo conteggio. Come altri hanno detto, quando hai bisogno della stringa per la visualizzazione o per qualsiasi motivo, puoi usare il suo c_str()metodo che ti darà la stringa con il terminatore nullo alla fine.