sprintf':无法将参数1从'const char*'转换为'char*'

use*_*458 2 c++ visual-c++

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要好得多).


vla*_*sch 9

您的警告会为您提供所需的所有信息.

std::string::c_str()返回a const char*和sprintf需要一个,char*因为它修改了缓冲区.

但是你正在编写c ++并且应该避免使用sprintf.使用a ostringstream将格式化数据写入字符串.