我想打印一個字符串方式如下:的「printf」亂碼
int main(){
string s("bla");
printf("%s \n", s);
.......
}
,但我得到的是這種隨機亂碼。
你能解釋一下爲什麼嗎?
我想打印一個字符串方式如下:的「printf」亂碼
int main(){
string s("bla");
printf("%s \n", s);
.......
}
,但我得到的是這種隨機亂碼。
你能解釋一下爲什麼嗎?
因爲%s
表示char*
,而不是一個std::string
。使用s.c_str()
或更好的使用,iostreams的:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s("bla");
std::cout << s << "\n";
}
您需要使用c_str才能獲得等同於字符串內容的c字符串,因爲printf
不知道如何打印字符串對象。
string s("bla");
printf("%s \n", s.c_str());
相反,你可以這樣做:
string s("bla");
std::cout<<s;
謝謝...順便說一句 - 爲什麼? printf不知道如何處理字符串? 是否有另一種方法可以使用? – user429400 2010-09-03 10:18:30
我試過它與std :: cout和編譯器發出一個錯誤:二進制'<<':找不到操作符,它需要類型'std :: string'的右操作數 – user429400 2010-09-03 10:22:23
printf不知道如何處理C++ std :: string s,它在c字符串(字符數組用\ 0標記字符串結尾)上工作,請注意,由於向後兼容性C++ C++字符串文字,即只是「bla」而不是字符串s(「bla 「)是c字符串,而不是C++ std :: string類的對象。 – 2010-09-03 10:48:42
爲什麼你不只是使用
char s[]="bla";
我用std :: cout試過了,編譯器發出了一個錯誤: 二進制'<<':找不到操作符找到'std :: string'類型的右操作數 – user429400 2010-09-03 10:21:00
這很奇怪。這是哪個C++實現? – pjc50 2010-09-03 10:57:12
我已將代碼修改爲自包含和可編譯(並經過測試)。 – 2010-09-03 11:18:43