Возвращение c_str из функции
Это из небольшой библиотеки, которую я нашел в Интернете:
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
) было выделено статическое хранилище. Не означает ли это, что объект должен оставаться в памяти до завершения программы? И если так, то почему нельзя получить доступ к строке?