2011-07-28 15 views
5

Sabemos que al insertar \n en una secuencia de archivos, la secuencia de fin de línea apropiada para el sistema se escribirá en el archivo (por ejemplo, \r\n para Windows). ¿La inserción de una línea final en un std::stringstream da como resultado que la secuencia de fin de línea apropiada para el sistema se escriba en la cadena? Por ejemplo:Inserción de línea final en un stringstream

#include <sstream> 

int main() 
{ 
    std::ostringstream oss; 
    oss << std::endl; 
    std::string endlineSequence = oss.str(); 
    bool isWindows = enlineSequence == "\r\n"; 
    bool isOldMac = endlineSequence == "\r"; 
    bool isUnix = endlineSequence == "\n"; 
    // Will this work??? 
} 
+1

Para ahorrar tiempo, puede ejecutar y ver si todos los 'bool's en su programa son 'verdaderos' o no ... lo más probable es' isWindows' y 'isMac' se evaluará a' false'. –

+0

@Aditya: Tendría que probar en cada plataforma. No todos tienen un recuadro de Windows, Mac y Unix a su disposición. :-) –

+0

@Emile: no, solo tiene que probarlo en Windows. Porque si escribe '\ n' y obtiene' \ r \ n', hace la traducción a newline nativa; y si obtienes '\ n' no es así. Sin embargo, no se nota en Linux o MacOS X. –

Respuesta

11

El sistema finales de línea específicos sólo son relevantes para el texto archivos. Siempre que la transmisión esté solo en la memoria, es solo '\n'.

+6

¿Cómo puede ser cualquier cosa menos el carácter único '\ n' en una cadena de caracteres? Supongamos que la traducción se realizó en una secuencia de cadenas. Piensa en el desastre que resultaría con 'sstream1 <<" \ n "; sstream2 << stream1.str(); ...; std :: cout << sstream99.str(); ' –

3

Respuesta corta: No.

Respuesta larga:

El flujo de archivos en modo texto insertará ELS específicos de una plataforma en el archivo. Pero la aplicación nunca verá esto, ya que el ELS se convierte de nuevo en \n cuando se lee el archivo. Entonces, incluso con la transmisión de archivos (en modo texto) nunca verás el ELS.

Volver al std::stringstream. Si el código sí insertó un ELS específico de la plataforma (que no es así), cuando lea la transmisión, aún esperaría ver \n cuando la lea de nuevo, como es de esperar que se vuelva a convertir el ELS. No tiene mucho sentido hacerlo.

Cuestiones relacionadas