std::ostringstream не возвращает правильную строку
Я пытаюсь использовать std::ostringstream для преобразования числа в строку (char *), но, похоже, это не работает. Вот код, который у меня есть:
#include <windows.h>
#include <sstream>
int main()
{
std::ostringstream out;
out << 1234;
const char *intString = out.str().c_str();
MessageBox(NULL, intString, intString, MB_OK|MB_ICONEXCLAMATION);
return 0;
}
В появившемся окне сообщения просто нет текста.
Это приводит меня к мысли, что призыв к out.str().c_str()
возвращает неверную строку, но я не уверен. Поскольку я урезал эту программу до сих пор, но проблема все еще не решена, я, должно быть, сделал смущающую простую ошибку. Помощь приветствуется!
1 ответ
Решение
out.str()
возвращает std::string
по значению, что означает, что вы звоните .c_str()
на временное. Следовательно, к тому времени intString
инициализируется, он уже указывает на недействительные (уничтоженные) данные.
Кэшировать результат .str()
и работать с этим:
std::string const& str = out.str();
char const* intString = str.c_str();