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();
Другие вопросы по тегам