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.
142
3
Es'kompiliert, weil
printf
nicht typsicher ist, da es variable Argumente im Sinne von C verwendet1.printf
hat keine Option fürstd::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
, dastd::string
dies durch Operatorüberladung unterstützt:Bitte verwenden Sie nicht
printf("%s", your_string.c_str());
Verwenden Sie stattdessen `cout
Verwenden Sie
myString.c_str()
, wenn Sie eine c-ähnliche Zeichenkette (const char*
) mit printf verwenden wollendanke