SORU
2 HAZİRAN 2012, CUMARTESİ


C ile basit bir beşgen kullanmaktır std::string?

C burada AS3 bir geçmişi olan çaylak. Şu anda kitap boyunca yapmak 22**.

Benim anlayışıma göre string std ad üyesi olan, o zaman neden aşağıdaki 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;
}

enter image description here

Program her çalıştığında, myString çıktı yukarıdaki gibi 3 karakter rastgele bir dize yazdırır.

CEVAP
2 HAZİRAN 2012, CUMARTESİ


C anlamda bağımsız değişken kullandığından printf türü güvenli değil çünkü derleme1. printf std::string, C stilinde dize sadece bir için bir seçenek vardır. Kesinlikle ne beklediğini yerine başka bir şey kullanarak size istediğiniz sonuçları vermez. Aslında tanımsız davranış, herhangi bir şey olabilir.

C kullanıyorsun beri bunu düzeltmek için en kolay yolu,, normalde std::string operatör aşırı yükleme: bu destekler beri std::cout ile baskı

std::cout << "Follow this command: " << myString;

Nedense C-stil dize ayıklamak için gerekiyorsa, std::string c_str() yöntemi sonlandırılmış olduğunu const char * bir almak için kullanabilirsiniz. Örnek kullanımı:

#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.c_str()); //note the use of c_str
    cin.get();

    return 0;
}

Eğer printf ama yazın kasa gibi bir işlevi istiyorsanız, variadic şablonları (C 11, tüm büyük Derleyiciler desteklenen MSVC12) içine bak. 23* *tek bir örnek bulabilirsiniz. Hiç bir şey bilmiyorum standart kütüphanedeki gibi uygulanan var, ama güç olarak, özellikle 24* *olabilir.


[1]: Bu bağımsız değişken herhangi bir sayı geçmesi anlamına gelir, ama işlevi bu argüman sayısı ve türleri anlatmak için kullanır. printf durumunda %d gibi kodlanmış tür bilgileri int anlamı olan bir dize anlamına gelir. Eğer türü veya sayısı hakkında yalan söylersen, işlev, bazı Derleyiciler kontrol ve yalan söylediğin zaman uyarı vermek için yeteneği var, ancak bilmenin bir standart yol vardır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 30GB

    30GB

    14 AĞUSTOS 2006
  • LG Mobile Global

    LG Mobile Gl

    2 EYLÜL 2010
  • sdasmarchives

    sdasmarchive

    2 HAZİRAN 2010