簡體   English   中英

C ++和printf-奇怪的字符輸出

[英]C++ and printf - strange character output

我是C ++的新手,但不是Java,C#,JavaScript,VB的新手。 我正在使用Visual Studio 2010中的默認C ++控制台應用程序。

在嘗試執行printf時,我得到了一些奇怪的字符。 每次都不同,這告訴我他們每次運行它都可能在尋找不同的內存位置。

碼:

#include "stdafx.h"
#include <string>

using namespace std;

class Person
{
public:
    string first_name;
};

int _tmain(int argc, _TCHAR* argv[])
{
    char somechar;
    Person p;
    p.first_name = "Bruno";

    printf("Hello %s", p.first_name);
    scanf("%c",&somechar);
    return 0;
}

問題是printf / scanf不是類型安全的。 您正在提供一個std::string對象,其中printf需要const char*

解決此問題的一種方法是編寫

printf("Hello %s", p.first_name.c_str());

但是,由於您使用C ++進行編碼,因此優先使用I / O流優先於printf / scanf

std::cout << p.first_name << std::endl;
std::cin >> c;

將字符串轉換為c字符串。

printf("Hello %s", p.first_name.c_str()); 

另外,由於您使用的是C ++,因此您應該了解cout而不是printf!

使用printf("Hello %s",p.first_name.c_str());

printf("Hello %s", p.first_name.c_str());

但是,如果使用的是c ++,為什么不使用iostream?

您不能將C ++ std::string對象傳遞給printf printf僅了解基本類型,例如intfloatchar* 您的編譯器應該在那里警告您。 如果不是,請提高您的警告級別。

由於您使用的是C ++,因此您確實應該使用std::cout進行文本輸出,並且確實可以理解std::string對象。 如果由於某種原因確實必須使用printf ,則可以通過在其上調用c_str()方法將std::string轉換為const char*

printf("%s")接受c樣式的字符串,該字符串以'\\0'結尾。 但是, string對象是C ++對象,與c樣式的字符串不同。 您應該使用std::cout ,它被重載以直接處理string類型,如下所示。

std::cout << p.first_name;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM