c++ - Può una std:: string contenere null incorporati?




stdstring c-strings (3)

Puoi, ma perché vorresti? L'incorporamento di NUL in una stringa std ::: è solo una richiesta di guai, perché le funzioni a cui si passa una stringa std :: può usare molto bene il membro c_str () e la maggior parte supporrà che il primo NUL indichi la fine della stringa. Quindi questa non è una buona idea da fare. Si noti inoltre che in UTF-8, solo '\ 0' genererà uno 0, quindi anche per scopi i18n, non vi è alcuna giustificazione per l'incorporamento di NUL.

Per le stringhe C regolari, un carattere nullo '\0' indica la fine dei dati.

Che dire di std::string , posso avere una stringa con caratteri null incorporati?


Sì questo è valido.

Puoi avere un carattere nullo nel mezzo della stringa.

Tuttavia, se si utilizza una std :: string con un carattere null nel mezzo con una funzione di stringa ac in città di comportamento non definito e nessuno vuole essere lì !!!:

 int n = strlen( strWithNullInMiddle.c_str() ); // Boom!!!

Sì. Una std :: string è solo un vector<char> con vantaggi.

Tuttavia, fai attenzione a passare una bestia simile a qualcosa che chiama .c_str() e si ferma allo 0.





null-terminated