[英]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
僅了解基本類型,例如int
, float
和char*
。 您的編譯器應該在那里警告您。 如果不是,請提高您的警告級別。
由於您使用的是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.