关于c ++:字符串上的“ printf”打印乱码

“printf” on strings prints gibberish

我正在尝试通过以下方式打印字符串:

1
2
3
4
5
6
int main(){
    string s("bla");
    printf("%s \
"
, s);
         .......
}

但我得到的只是这个乱七八糟的东西。

你能解释为什么吗?


因为%s表示char*,而不是std::string。 使用s.c_str()或更好地仍使用iostream:

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <string>

using namespace std;

int main()
{
  string s("bla");
  std::cout << s <<"\
"
;
}


您需要使用c_str来获得与字符串内容等效的c字符串,因为printf不知道如何打印字符串对象。

1
2
3
string s("bla");
printf("%s \
"
, s.c_str());

相反,您可以执行以下操作:

1
2
string s("bla");
std::cout<<s;


当我从以下位置切换时,我已经成功地使用" cout"打印了字符串:

1
#include <string.h>

1
#include <string>

我希望我能理解为什么如此重要...


你为什么不只用

1
char s[]="bla";