¿Cómo se borra una variable de cadena de caracteres?

Ya intenté varias cosas,

std::stringstream m; m.empty(); m.clear(); 

ninguno de los cuales funciona

Para todos los tipos de biblioteca estándar, la función miembro empty() es una consulta, no un comando, es decir, significa “¿estás vacío?” no “por favor tira tus contenidos”.

La función de miembro clear() se hereda de ios y se usa para borrar el estado de error de la transmisión; por ejemplo, si una secuencia de archivos tiene el estado de error configurado en eofbit (fin de archivo), al llamar a clear() se establecerá estado de error a goodbit (sin error).

Para borrar los contenidos de un stringstream , usando:

 m.str(""); 

es correcto, aunque usando:

 m.str(std::string()); 

es técnicamente más eficiente, porque evita invocar el constructor std::string que toma const char* . Pero cualquier comstackdor en estos días debería ser capaz de generar el mismo código en ambos casos, así que simplemente iría con lo que sea más legible.

Puede borrar el estado de error y vaciar el strignstream todo en una línea

 std::stringstream().swap(m); // swap m with a default constructed stringstream 

Esto restablece efectivamente m a un estado construido predeterminado

 m.str(""); 

parece funcionar.

Esta debería ser la forma más confiable independientemente del comstackdor:

 m=std::stringstream(); 

Siempre estoy analizando:

 { std::stringstream ss; ss << "what"; } { std::stringstream ss; ss << "the"; } { std::stringstream ss; ss << "heck"; } 

mis 2 centavos:

esto parecía funcionar para mí en xcode y dev-c ++, tenía un progtwig en forma de menú que, si se ejecutaba de forma iterativa según la solicitud de un usuario, rellenaría una variable de cadena de caracteres que funcionaría bien la primera vez que el código lo hiciera ejecutar pero no eliminar el stringstream la próxima vez que el usuario ejecute el mismo código. pero las dos líneas de código a continuación aclararon la variable de cadena de caracteres cada vez antes de rellenar la variable de cadena. (2 horas de prueba y error y búsquedas en Google), por cierto, usar cada línea por su cuenta no funcionaría.

 //clear the stringstream variable sstm.str(""); sstm.clear(); //fill up the streamstream variable sstm << "crap" << "morecrap"; 

Es un problema conceptual.

Stringstream es una secuencia, por lo que sus iteradores son hacia adelante, no pueden regresar. En un flujo de salida, necesita un flush () para reiniciarlo, como en cualquier otro flujo de salida.

Estos no descartan los datos en el flujo de cadenas en gnu c ++

  m.str(""); m.str() = ""; m.str(std::string()); 

Lo siguiente vacía el flujo de cadenas para mí:

  m.str().clear();