C++ 如何对字符串使用printf?

C++ 如何对字符串使用printf?,c++,C++,这是我的代码 string name; cout <<"\n Enter Your name : \n"; cin >> name; printf("%s" , name); 字符串名; 姓名; printf(“%s”,名称); 出于一些奇怪的原因,代码块在此崩溃 为什么? 还有,我怎样才能修好它 谢谢您应该使用所有警告进行编译(例如g++-Wall)。你会得到一个有用的警告。你想这样用吗 printf("%s", name.c_str()); 顺便说一句,为什

这是我的代码

string name;
cout <<"\n   Enter Your name : \n";
cin >> name;
printf("%s" , name);
字符串名;
姓名;
printf(“%s”,名称);
出于一些奇怪的原因,代码块在此崩溃

为什么?

还有,我怎样才能修好它


谢谢

您应该使用所有警告进行编译(例如
g++-Wall
)。你会得到一个有用的警告。你想这样用吗

printf("%s", name.c_str());
顺便说一句,为什么要使用
printf
,为什么在
printf
格式字符串的末尾忘记了
\n
?(或使用
fflush

更好的代码:

cout << name << endl;

cout编译时应包含所有警告(例如
g++-Wall
)。你会得到一个有用的警告。你想这样用吗

printf("%s", name.c_str());
顺便说一句,为什么要使用
printf
,为什么在
printf
格式字符串的末尾忘记了
\n
?(或使用
fflush

更好的代码:

cout << name << endl;
cout如果需要将
std::string
传递给接受/使用C样式字符串(
const char*
)作为输入的函数,请使用
.C_str()
。它返回一个
常量字符*

这是你在使用现有的库、系统调用等时应该做的事情,对于你自己的代码,通常最好找到一个C++的方式来做。 在这种情况下:

std::cout << name << std::endl;
std::cout如果需要将
std::string
传递给接受/使用C样式字符串(
const char*
)作为输入的函数,请使用
.C_str()
。它返回一个
常量字符*

这是你在使用现有的库、系统调用等时应该做的事情,对于你自己的代码,通常最好找到一个C++的方式来做。 在这种情况下:

std::cout << name << std::endl;

std::cout不要将
std::cout
printf
混用。两者都是缓冲区,但使用不同的缓冲区,这可能会使您的输出出乎意料。混合使用C++风格和C风格的I/O是非常好的定义,只要您没有调用
ios::sync\u with_stdio(false)
。不过,这可能是不好的风格。不要将
std::cout
printf
混用。两者都是缓冲区,但使用不同的缓冲区,这可能会使您的输出出乎意料。混合使用C++风格和C风格的I/O是非常好的定义,只要您没有调用
ios::sync\u with_stdio(false)
。不过,这可能是不好的风格。谢谢!我在测试printf,这只是代码的一小部分,我想制作一个基于文本的rpg&我觉得printf如果没有这些“谢谢!我在测试printf,这只是代码的一小部分,我想制作一个基于文本的rpg&我觉得printf没有这些东西会占用更少的空间”