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

¿Fue útil?

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:

http://groups.google.com/group/comp.lang.c++.moderated

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top