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.

Çözüm

Derleniyor çünkü printf' C anlamında değişken argümanlar kullandığı için tip güvenli değil1. printfin std::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:


std::cout 
Yorumlar (2)

Lütfen printf("%s", your_string.c_str()); kullanmayın

Bunun yerine `cout

Yorumlar (23)

printf ile kullanmak için c benzeri bir dize (const char*) istiyorsanız myString.c_str() kullanın

Teşekkürler

Yorumlar (0)