stringstream, string y char * confusión de conversión
Mi pregunta puede reducirse a, ¿de dónde viene la cadena que regresó?stringstream.str().c_str()
vivir en la memoria, y por qué no puede ser asignado a unconst char*
?
Este ejemplo de código lo explicará mejor que yo
#include <string>
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
stringstream ss("this is a string\n");
string str(ss.str());
const char* cstr1 = str.c_str();
const char* cstr2 = ss.str().c_str();
cout << cstr1 // Prints correctly
<< cstr2; // ERROR, prints out garbage
system("PAUSE");
return 0;
}
El supuesto de questringstream.str().c_str()
podría ser asignado a unconst char*
Condujo a un error que me tomó un tiempo para localizar.
Para obtener puntos de bonificación, ¿puede alguien explicar por qué reemplazando elcout
declaración con
cout << cstr // Prints correctly
<< ss.str().c_str() // Prints correctly
<< cstr2; // Prints correctly (???)
imprime las cadenas correctamente?
Estoy compilando en Visual Studio 2008.