Qual è la differenza tra std :: string :: c_str e std :: string :: dati? [duplicare]
Domanda
Questa domanda ha già una risposta qui:
- stringa c_str () i dati vs. () 6 risposte
Perché mai dovrei voler chiamare std::string::data()
su std::string::c_str()
? Sicuramente c'è qualche metodo per la follia della norma qui ...
Soluzione
c_str () garantisce terminazione NUL. dati () non lo fa.
Altri suggerimenti
c_str () restituisce un puntatore ai dati con un byte NUL aggiunto in modo da poter utilizzare il valore di ritorno come una "stringa C".
Dati () restituisce un puntatore ai dati senza alcuna modifica.
Utilizzare c_str () se il codice si utilizza assume una stringa è termina con NUL (come ad esempio una funzione scritta per gestire stringhe C).
Ora in MS STL 10.0 non ci sembra essere alcuna differenza, come vedo questo nell'intestazione:
... \ Microsoft Visual Studio 10.0 \ VC \ include \ xstring
const _Elem *c_str() const
{ // return pointer to null-terminated nonmutable array
return (_Myptr());
}
const _Elem *data() const
{ // return pointer to nonmutable array
return (c_str());
}
Quindi ritornano la stessa cosa.