Это не должно быть предупреждение, оно должно быть ошибкой. Указатель , возвращаемый std::string::c_str()
, указывает на постоянное запоминающее устройство; любая попытка записи через него - это неопределенное поведение. (В вашем случае, если вы используете const_cast
заткнуться компилятор, вы код, вероятно, аварии, так как вы звоните c_str()
на пустой strying.)
Вообще говоря, то, что вы, вероятно, хотите является std::ostringstream
:
std::ostringstream formatter;
formatter << "Helloworld" << ' ' << 2014;
std::string myString = formatter.str();
FWIW: sprintf
является одним из наиболее опасных функций в стандартной библиотеке , и присутствует только по историческим причинам. Это практически невозможно использовать безопасно; даже в C, вы должны предпочесть snprintf
(но в C++, std::ostringstream
намного лучше).
первый параметр Sprintf должен быть символ *, но вы передаете константный символ *. ** mystring.c_str() ** - const char *. вы можете использовать append, чтобы делать все, что хотите, для sprintf ** mystring.append («Helloworld 2014»); ** – Gangadhar
Первый аргумент «sprintf» - это указатель на массив символов «char *», где форматированная строка будет сохранены. С другой стороны, mystring.c_str() представляет собой массив символов контировки, который генерируется из mystring. Тип данных для них отличается. –