Devolver 'c_str' desde una función
Esto es de una pequeña biblioteca que encontré en línea:
const char* GetHandStateBrief(const PostFlopState* state)
{
static std::ostringstream out;
// ... rest of the function ...
return out.str().c_str()
}
En mi código estoy haciendo esto:
const char *d = GetHandStateBrief(&post);
std::cout<< d << std::endl;
Ahora al principiod
basura contenida Luego me di cuenta de que la cadena C que obtengo de la función se destruye cuando la función regresa porquestd::ostringstream
se asigna en la pila. Entonces agregué:
return strdup( out.str().c_str());
Y ahora puedo obtener el texto que necesito de la función.
Tengo dos preguntas:
¿Estoy entendiendo esto correctamente?
Más tarde me di cuenta de queout
(de tipostd::ostringstream
) se asignó con almacenamiento estático. ¿No significa eso que se supone que el objeto permanecerá en la memoria hasta que el programa termine? Y si es así, ¿por qué no se puede acceder a la cadena?