Ich habe Probleme mit der Initialisierung einer std :: string-Variable mit ""
(d. h. eine leere Zeichenfolge). Es verursacht merkwürdiges Verhalten in Code, der zuvor funktionierte. Ist die folgende Aussage falsch?
Wenn ich den folgenden Code verwende, funktioniert alles:
%Vor% Ich glaube, dass String-Literale an einem separaten Speicherort gespeichert sind, der compilerabhängig ist. Könnte das Problem, das ich sehe, tatsächlich eine Beschädigung dieses Speichers anzeigen? Wenn ja, würde es durch die Verwendung der Funktion clear()
ausgeblendet werden.
Danke.
Was passiert, wenn du nur std::string operationalReason;
machst? Das sollte die gleiche Wirkung haben wie die beiden Beispiele, die Sie angegeben haben. Wenn tatsächlich Probleme auftreten, wenn Sie das Formular std::string operationalReason = "";
verwenden, das darauf hinweisen kann, dass der Datenspeicher der Zeichenfolge beschädigt wurde, kann dies jedoch auch bedeuten, dass ein anderer ANDERER Speicherbereich beschädigt ist und diese Zeile sich anders manifestiert .
Stürzt Ihr Code sofort ab, wenn Sie das ""
-Formular oder später zur Laufzeit verwenden? Können Sie dies unter valgrind o.ä. ausführen, um festzustellen, ob es Speicherprobleme gibt? Was passiert, wenn Sie die Zeichenfolge mit einem anderen Literal als ""
? Initialisiert haben?
std::string operationalReason = "";
Das ist vollkommen in Ordnung, technisch, aber häufiger und schön ist nur
std::string operationalReason;
Der Standard-ctor der Zeichenfolge wird eine leere Zeichenfolge
erstellenJa, Sie haben recht, wenn String-Literale in einem nicht-änderbaren Speicher gespeichert werden, blah, blah usw. usw., aber der String copy-ctor kopiert immer die Zeichenfolge oder den C-String, die übergeben wurden
Die beiden Formen sind korrigiert, aber diese:
%Vor% Ruft den Konstruktor auf, der ein const char *
als Argument benötigt. Zuerst ruft es den Standardkonstruktor auf und versucht dann, die Daten zu kopieren, in diesem Fall nichts.
ist vorzuziehen.
Sie können clear()
verwenden, um es auf eine leere Zeichenfolge zurückzusetzen.