CRLF à la fin de la ligne et ostringstream
Je suis en train d'utiliser un ostringstream de construire une chaîne qui utilise la plate-forme standard des fins de ligne (donc pour moi c'est CRLF depuis que je suis en train d'élaborer pour Windows). J'ai essayé le code suivant:
std::ostringstream out;
out << "line1\nline2\n";
const char* result = out.str().c_str(); //In result end of lines are '\n' instead
//of the expected '\r\n'
Depuis ostringstream s'ouvre par défaut en mode texte, j'ai pensé qu'il serait de réaliser la fin de la ligne de conversion (comme un ofstream), mais le char buffer ne contient pas attendus CRLF à la fin de lignes....
Edit:
Pour ceux qui se demandait pourquoi j'avais besoin de la CRLF se terminant en interne: - je copier le texte dans le presse-papiers de Windows et de l'utilisateur de copier le contenu dans le bloc-notes et sans le CRLF à la fin de la fin de lignes sont perdus au cours de cette dernière opération....
Ma solution:
Finalement, j'ai décidé d'utiliser la bibliothèque boost pour remplacer \n \r\n:
boost::replace_all( str, "\n", "\r\n" );
- Qui est correct.
std::ostringstream
utilise interne de la chaîne de texte à la représentation. CRLF est utilisé pour le disque représentation de texte. Si vous lisez lestd::ifstream
àstd::string
vous vous attendez à ce que CRLF est converti à la représentation interne. Donc, tout le monde s'attend à ce questd::string
contient interne de la représentation de texte à tout moment.
Vous devez vous connecter pour publier un commentaire.
Bien, '\n' est la représentation interne de fin de ligne.
C'est seulement lorsque vous écrivez un fichier externe, il est converti (si nécessaire!) pour la représentation extérieure. Sur certains systèmes, la fin de ligne est juste un personnage, ou même pas de caractère à tous stockés avec un caché valeur de la longueur de la place.
La distinction texte/mode mode binaire est purement std::filebuf. Ce n'est pas
utiles ailleurs.
Je ne suis pas sûr de savoir pourquoi vous voulez autre chose que des "\n" dans une chaîne de caractères,
mais il n'est pas difficile: il suffit de définir
et de sortie.