printf mit std::string?

Meinem Verständnis nach ist "String" ein Mitglied des "std"-Namensraums, warum tritt dann folgendes auf?

#include <iostream>

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;
}

Jedes Mal, wenn das Programm läuft, gibt myString eine scheinbar zufällige Zeichenkette aus 3 Zeichen aus, wie in der obigen Ausgabe.

Lösung

Es'kompiliert, weil printf nicht typsicher ist, da es variable Argumente im Sinne von C verwendet1. printf hat keine Option für std::string, nur einen String im C-Stil. Die Verwendung von etwas anderem anstelle dessen, was erwartet wird, wird definitiv nicht die gewünschten Ergebnisse liefern. Es ist eigentlich ein undefiniertes Verhalten, es könnte also alles Mögliche passieren.

Der einfachste Weg, dies zu beheben, da Sie C++ verwenden, ist die normale Ausgabe mit std::cout, da std::string dies durch Operatorüberladung unterstützt:


std::cout 
Kommentare (2)

Bitte verwenden Sie nicht printf("%s", your_string.c_str());

Verwenden Sie stattdessen `cout

Kommentare (23)

Verwenden Sie myString.c_str(), wenn Sie eine c-ähnliche Zeichenkette (const char*) mit printf verwenden wollen

danke

Kommentare (0)