字符串上的"printf"打印出乱码

use*_*400 14 c++ string printf

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

int main(){
    string s("bla");
    printf("%s \n", s);
         .......
}
Run Code Online (Sandbox Code Playgroud)

但我得到的只是随机的胡言乱语.

你能解释一下原因吗?

Mar*_*tos 26

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

#include <iostream>
#include <string>

using namespace std;

int main()
{
  string s("bla");
  std::cout << s << "\n";
}
Run Code Online (Sandbox Code Playgroud)


cod*_*ict 18

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

string s("bla");
printf("%s \n", s.c_str());
Run Code Online (Sandbox Code Playgroud)

相反,你可以这样做:

string s("bla");
std::cout<<s;
Run Code Online (Sandbox Code Playgroud)