Was nützt es heutzutage für "Enden"?

Ich bin vor ein paar Tagen auf einen kleinen Fehler gestoßen, bei dem der Code ungefähr so aussah:

ostringstream ss;
int anInt( 7 );

ss << anInt << "HABITS";
ss << ends;
string theWholeLot = ss.str();

Das Problem war, dass dieends steckte ein '\ 0' in dieostringstream damittheWholeLot sah eigentlich so aus"7HABITS\0" (d. h. eine Null am Ende)

Das war jetzt nicht aufgetaucht, weiltheWholeLot wurde dann verwendet, um die zu nehmenconst char * Portion mitstring::c_str() Dies bedeutete, dass die Null maskiert wurde, da sie nur ein Begrenzer wurde. Als sich dies jedoch dahingehend änderte, dass Zeichenfolgen verwendet wurden, bedeutete die Null plötzlich etwas und Vergleiche wie:

if ( theWholeLot == "7HABITS" )

würde versagen. Das brachte mich zum Nachdenken: Vermutlich der Grund fürends ist ein Rückfall in die Zeit vonostrstream wenn der stream normalerweise nicht mit einer null beendet wurde und das so sein musstestr() (die wirft dann nicht einstring aber achar *) würde korrekt funktionieren.

Jetzt ist es jedoch nicht möglich, a auszutreibenchar * von einemostringstreammitends ist nicht nur überflüssig, sondern potenziell gefährlich und ich denke darüber nach, sie alle aus dem Code meines Kunden zu entfernen.

Kann jemand einen offensichtlichen Grund für die Verwendung sehenends in einemstd::string einzige Umgebung?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage