Was ist der Unterschied zwischen std :: string :: c_str und std :: string :: data? [Duplikat]
Frage
Diese Frage bereits eine Antwort hier:
- Zeichenfolge c_str () vs. data () 6 Antworten
Warum sollte ich jemals nennen wollen std::string::data()
über std::string::c_str()
? Sicherlich gibt es einige Verfahren, um den Wahnsinn des Standard hier ...
Lösung
c_str () garantiert NUL Kündigung. Daten () nicht.
Andere Tipps
c_str () gibt einen Zeiger auf die Daten mit einer NUL-Byte angehängt, so dass Sie den Rückgabewert als „C-String“ verwenden können.
data () gibt einen Zeiger auf die Daten ohne Modifikationen.
Mit c_str (), wenn der Code, den Sie verwenden übernimmt eine Zeichenfolge ist NUL beendet (wie jede Funktion Griff C-Strings geschrieben).
Jetzt in MS STL 10.0 Es scheint keinen Unterschied zu sein, da sehe ich in der Kopfzeile:
... \ 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());
}
So sie die gleiche Sache zurück.