std::string mystring;
sprintf(mystring.c_str(), "%s %d", "Helloworld", 2014);
Run Code Online (Sandbox Code Playgroud)
它给我一个编译错误:
'sprintf' : cannot convert parameter 1 from 'const char *' to 'char *'
Jam*_*nze 10
它不应该是一个警告,它应该是一个错误.std::string::c_str()点返回指向只读内存的指针; 任何通过它写的尝试都是未定义的行为.(在你的情况下,如果你使用a const_cast来关闭编译器,你的代码可能会崩溃,因为你正在调用c_str()空的strying.)
一般来说,你可能想要的是
std::ostringstream:
std::ostringstream formatter;
formatter << "Helloworld" << ' ' << 2014;
std::string myString = formatter.str();
Run Code Online (Sandbox Code Playgroud)
FWIW:sprintf是标准库中最危险的函数之一,仅出于历史原因.安全使用几乎是不可能的; 甚至在C中,你应该更喜欢
snprintf(但在C++中,std::ostringstream要好得多).
您的警告会为您提供所需的所有信息.
std::string::c_str()返回a const char*和sprintf需要一个,char*因为它修改了缓冲区.
但是你正在编写c ++并且应该避免使用sprintf.使用a ostringstream将格式化数据写入字符串.