¿Por qué es rdbuf stringstreams () y str () me está dando salida diferente?
-
05-09-2019 - |
Pregunta
Tengo este código,
int main()
{
std::string st;
std::stringstream ss;
ss<<"hej hej med dig"<<std::endl;
std::getline(ss,st,' ');
std::cout <<"ss.rdbuf()->str() : " << ss.rdbuf()->str();
std::cout <<"ss.rdbuf() : " << ss.rdbuf();
return 0;
}
Dándome esta salida
ss.rdbuf () -> str (): hej hej med dig
ss.rdbuf (): hej med dig
Pero por qué es eso? Es que debido a la definición del operador ostreams
Solución
ss.rdbuf()->str();
Las devoluciones copia de todo el contenido del búfer.
¿Qué hacer std::cout << ss.rdbuf();
?
Ver descripción de
basic_ostream<charT,traits>& operator<<(basic_streambuf<charT,traits>* sb);
Se leyó carácter por carácter de la memoria intermedia y escribir a ostream, hasta EF / fallo se produce en la escritura / excepción.
Usted ya ha leído una palabra de aficionado. Ahora se leyó parte resto.
Otros consejos
Para citar de la Biblia en C ++ flujo de E / S, Langer y Kreft , llamando str () en un búfer de la secuencia (es decir, lo que devuelve rdbuf ()) "se comporta de una manera extremadamente contrario a la intuición" (página 72 en mi edición). Para la historia completa, tendrá que leer el libro.
Si usted no recibe una respuesta satisfactoria aquí, prueba el grupo de Usenet: