Почему дополнительные \ r вводятся в windows? - PullRequest
3 голосов
/ 26 мая 2011
#include <iostream>
using namespace std;
int main( int argc, char *argv[])
{
    cout << "Hello\nWorld";
}

D:\test>hw |od -c
0000000   H   e   l   l   o  \r  \n   W   o   r   l   d
0000014

Почему дополнительные \r вводятся в Windows (не происходит в Linux)?

Ответы [ 3 ]

7 голосов
/ 26 мая 2011

Это особенность Windows, восходящая к первым дням MS-DOS. В этих системах принято, что разделителем строк является пара символов "\r\n". Конечно, в Linux / Unix / Solaris / и т. Д. Разделителем строк является один символ "\n"

Существуют различные утилиты, такие как dos2unix и unix2dos в Linux, которые ничего не делают, кроме этого преобразования. Практически каждая программа для передачи файлов тоже имеет с ней дело. См. Команду режима kermit.

Соглашение коснулось функции библиотеки времени выполнения MSDOS / windows C fopen() (среди прочих): второй параметр может иметь b или t для явной установки преобразования разделителя строк. Преобразование t ext преобразует \r\n в \n на входе и \n в \r\n на выходе. b внутреннее преобразование не делает такого преобразования.

FILE *f1 = fopen ("somefile.txt", "rt");  /* open in text conversion mode */
FILE *f2 = fopen ("anotherfile.bin", "rb");  /* open without text conversion */
1 голос
/ 26 мая 2011

Windows, Unix и Mac все отмечают новые строки по-разному.

Windows использует \ r \ n, Unix / Linux \ n, Mac \ r. Как только вы начинаете работать с текстовыми файлами на нескольких платформах, это превращается в настоящий беспорядок. Вот почему любой серьезный текстовый редактор имеет возможность переключаться между ними и почему в Linux есть такие утилиты, как dos2unix. Попробуйте загрузить текстовый файл в стиле Unix (только с \ n) в Блокнот. Вы заметите, что все это в одной строке.

1 голос
/ 26 мая 2011

Поскольку функция вывода не зависит от платформы.в окнах все разрывы строк \ r \ n, int constract, linux / unix \ n

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...