std::endl
inserta una nueva línea apropiada para el sistema. Puede usar un
ostringstream
para determinar la secuencia de nueva línea como una cadena en tiempo de ejecución.
#include <sstream>
int main()
{
std::ostringstream oss;
oss << std::endl;
std::string thisIsEnvironmentNewline = oss.str();
}
EDITAR: * Ver comentarios a continuación sobre por qué esto probablemente no va a funcionar.
Si usted sabe que sus plataformas estarán limitados a Windows, Mac y Unix, entonces se puede utilizar macros compilador predefinidas (listed here) para determinar la secuencia de línea de fondo en tiempo de compilación:
#ifdef _WIN32
#define NEWLINE "\r\n"
#elif defined macintosh // OS 9
#define NEWLINE "\r"
#else
#define NEWLINE "\n" // Mac OS X uses \n
#endif
La mayoría de las plataformas que no son de Windows ni de Apple son algún tipo de variante de Unix que usa \n
, por lo que las macros anteriores deberían funcionar en muchas plataformas. Por desgracia, no conozco ninguna forma portátil de determinar la secuencia final en el momento de la compilación para todas las plataformas posibles.
¿Por qué es necesario generar la nueva línea "local"? Desearía que la gente dejara de contaminar el mundo con la impresión de que "\ r \ n" es una nueva línea en Windows. Casi todos los editores de texto individuales en Windows manejan "\ n" solo encontrar. ¡El único contraejemplo del que he oído hablar es el Bloc de notas! –
Esta pregunta me hizo engendrar otra: http://stackoverflow.com/questions/6865398/inserting-endline-into-a-stringstream –
@Andre, ¿quién dijo algo acerca de la salida? –