std::string ile printf?
Anladığım kadarıyla string
std
isim alanının bir üyesi, öyleyse neden aşağıdakiler oluşuyor?
#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;
}
Program her çalıştığında, myString
yukarıdaki çıktıda olduğu gibi 3 karakterden oluşan rastgele bir dize yazdırır.
142
3
Derleniyor çünkü
printf' C anlamında değişken argümanlar kullandığı için tip güvenli değil1. printf
instd::string
için bir seçeneği yoktur, sadece C tarzı bir string kullanır. Beklediği şey yerine başka bir şey kullanmak kesinlikle size istediğiniz sonuçları vermeyecektir. Aslında bu tanımlanmamış bir davranıştır, yani her şey olabilir.C++ kullandığınız için bunu düzeltmenin en kolay yolu,
std::string
operatör aşırı yükleme yoluyla bunu desteklediğinden,std::cout
ile normal olarak yazdırmaktır:Lütfen
printf("%s", your_string.c_str());
kullanmayınBunun yerine `cout
printf ile kullanmak için c benzeri bir dize (
const char*
) istiyorsanızmyString.c_str()
kullanınTeşekkürler