Heim > Backend-Entwicklung > C++ > Hauptteil

Ist die Verwendung von „std::string::c_str()' mit einem temporären String in C sicher?

Mary-Kate Olsen
Freigeben: 2024-11-13 14:09:02
Original
875 Leute haben es durchsucht

Is Using `std::string::c_str()` with a Temporary String Safe in C  ?

Bewahrung der Integrität temporärer Strings: Erkundung von std::string::c_str()

Im Bereich von C sind die Sicherheit und Die Gültigkeit von Code mit temporären Zeichenfolgen gibt häufig Anlass zur Sorge. Eine dieser Fragen betrifft die Verwendung von std::string::c_str() im Kontext temporärer Zeichenfolgen.

Die Frage:

Bedenken Sie den folgenden Codeausschnitt:

void consumer(char const* p)
{
  std::printf("'%s'", p);
}

std::string random_string_generator();

consumer(random_string_generator().c_str());
Nach dem Login kopieren

Das Dilemma ergibt sich aus der möglichen Zerstörung des temporären std::string-Objekts nach dem Abrufen seines c_str()-Zeigers. Stellt dies gemäß dem C-Standard ein Gültigkeitsrisiko dar?

Die Antwort:

Das Verständnis der Lebensdauer von Provisorien ist von entscheidender Bedeutung. In C werden temporäre Dateien am Ende des vollständigen Ausdrucks zerstört, nicht unmittelbar nach ihrer Erstellung oder vor ihrer Verwendung. Daher bleibt im angegebenen Code das temporäre std::string-Objekt bis zum Abschluss des Funktionsaufrufs von Consumer() bestehen.

Der über std::string::c_str() erhaltene Zeiger bleibt gültig bis Jede nicht konstante Operation wird für das Zeichenfolgenobjekt ausgeführt oder es wird zerstört. Da das String-Objekt temporär ist und am Ende des vollständigen Ausdrucks zerstört wird, ist der Code tatsächlich wohlgeformt und gültig.

Historische Fußnote:

Es ist wichtig Beachten Sie, dass das oben beschriebene Verhalten mit C 98 standardisiert wurde. Zuvor variierte die Lebensdauer von Provisorien je nach Compiler-Implementierung. Mit zunehmender Reife des Standards wurde das Verhalten jedoch einheitlich definiert, um die Konsistenz aller Compiler sicherzustellen.

Das obige ist der detaillierte Inhalt vonIst die Verwendung von „std::string::c_str()' mit einem temporären String in C sicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage