Thr*_*iag 1 c++ string printf variadic-functions stdstring
在以下代码中:
#include <string>
using namespace std;
int main(){
char command[300];
string stringz = "mystringy";
sprintf(command,"echo \"something with a string %s\" ", stringz);
system(command);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么是输出
something with a string 8?
Run Code Online (Sandbox Code Playgroud)
而不是预期的
something with a string mystringy
Run Code Online (Sandbox Code Playgroud)
一个愚蠢的问题,但我无法找到答案.
printf的'%s'修饰符需要a char*而不是a std::string.
你可以写:
sprintf(command,"echo \"something with a string %s\" ", stringz.c_str());
Run Code Online (Sandbox Code Playgroud)
这给你一个a const char*的内容std::string.这显示了一个主要的缺点sprintf- 没有类型检查!
sprintf格式%s需要一个 C 字符串,它是一个以 0 结尾的数组char,而不是一个std::string.
stringz.c_str()从 C++11 开始&stringz[0],stringz.data()有几种方法可以获取 std::string 持有的 C 字符串。