Код (Text): #include <sstream> #include <fstream> int main() { std::stringstream sout; std::ofstream fout("test.txt"); sout << std::endl; fout << std::endl; std::string str = sout.str(); return 0; } В файл уйдет 0x0D, 0x0A. В строке будет 0x0A, 0x0D. Почему? Из-за этого при сборке HTTP-заготовка приходится писать руками "\r\n", а не std::endl. Нельзя ли с этим что-нибудь сделать?
Оно автоматически выбирает \r\n или \n в зависимости от того, на какой платформе и куда пишется. Но вот чтоб наоборот \n\r писало - впервые слышу. Собсно, для http прямо и надо указывать.
__DEN__ А ты уверен, что в строке \n\r? У меня VS 2005 SP1, в строке оказывается просто \n. Собственно, я не понимаю, откуда там могло взяться \r, если даже в исходниках <ostream> прописано только \n.
__DEN__ В строке вряд ли появится что-то кроме \n, если так написано в исходниках. А вот при выводе в файл - запросто. CRT может подменять все \n на \r\n.
проверил на ms vc 6, gcc и intel C++ (под линух). в строке всегда \xA, в файле: под вынь - \xD\xA, под линух - \xA. хотя можно было и не проверять, результат предсказуем заранее
Читайте crt исходники и наступит просветление. Может из-за этого(где-то в crt): while ( q - lfbuf < BUF_SIZE - 1 && (unsigned)(p - (char *)buf) < cnt ) { ch = *p++; if ( ch == LF ) { ++lfcount; *q++ = CR; } *q++ = ch; } PS. vs2003
qwerty_9876 Ну дык с файлами и так всё понятно А вот в строке - непонятно, откуда там могло \r взяться. _DEN_ обещал посмотреть у себя, но что-то ничего не написал.
Да, прошу прощения за глюк. Действительно, в std::stringstream выводдится только 0x0A. Программирование ночью после тяжелого трудового дня ни к чему хорошему не приводит