Это из небольшой библиотеки, которую я нашел в Интернете:
const char* GetHandStateBrief(const PostFlopState* state)
{
static std::ostringstream out;
// ... rest of the function ...
return out.str().c_str()
}
В моем коде я делаю это:
const char *d = GetHandStateBrief(&post);
std::cout<< d << std::endl;
Теперь сначала d
содержит мусор. Затем я понял, что строка C, которую я получаю от функции, уничтожается, когда функция возвращается, потому что std::ostringstream
размещено в стеке. И я добавил:
return strdup( out.str().c_str());
И теперь я могу получить нужный текст из функции.
У меня два вопроса:
Правильно ли я понимаю?
Позже я заметил, что out
(типа std::ostringstream
) было выделено со статическим хранилищем. Не означает ли это, что объект должен оставаться в памяти до завершения программы? И если так, то почему нельзя получить доступ к строке?