Heim > Backend-Entwicklung > C++ > Warum verursacht „printf' unerwartetes Verhalten mit „std::string' und wie kann ich es beheben?

Warum verursacht „printf' unerwartetes Verhalten mit „std::string' und wie kann ich es beheben?

DDD
Freigeben: 2024-12-31 13:01:11
Original
727 Leute haben es durchsucht

Why Does `printf` Cause Unexpected Behavior with `std::string`, and How Can I Fix It?

Verstehen der Verwendung von printf mit std::string

Obwohl std::string Mitglied des std-Namespace ist, führt der Versuch, es mit printf zu verwenden, zu unerwarteten Ergebnissen Verhalten, wie im folgenden Codeausschnitt zu sehen:

#include <iostream>
#include <string>

int main()
{
    using namespace std;

    string myString = "Press ENTER to quit program!";
    cout << "Come up and C++ me some time." << endl;
    printf("Follow this command: %s", myString);
    cin.get();

    return 0;
}
Nach dem Login kopieren

Dieses Problem tritt auf, weil printf nicht typsicher ist und basiert auf Strings im C-Stil. Um dieses Problem zu lösen, stehen mehrere Ansätze zur Verfügung:

Verwendung von std::cout

Da std::string das Überladen von Operatoren unterstützt, kann das Drucken mit std::cout: unkompliziert erfolgen

std::cout << "Follow this command: " << myString;
Nach dem Login kopieren

String im C-Stil extrahieren

Wenn das Extrahieren eines Strings im C-Stil erforderlich ist, kann dies mit der Methode c_str() erfolgen kann verwendet werden, um ein nullterminiertes const char * zu erhalten:

printf("Follow this command: %s", myString.c_str());
Nach dem Login kopieren

Verwendung von Variadic-Vorlagen

Alternativ können Variadic-Vorlagen eine typsichere Alternative zu printf bieten. Eine Beispielimplementierung finden Sie hier: https://stackoverflow.com/a/15014001. Boost bietet eine ähnliche Funktionalität mit boost::format.

C 23 Update

C 23 führt std::print ein, das die Stärken beider Ansätze vereint und so Folgendes ermöglicht Typsichere Ausgabe mit std::format:

#include <print>

std::print("Follow this command: {}", myString);
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum verursacht „printf' unerwartetes Verhalten mit „std::string' und wie kann ich es beheben?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage