Возврат каретки, перевод строки - в Windows?
Было бы полезно, если бы мы знали, как вы открыли файл. Если вы открыли его в виде текстового файла, то вы не должны видеть два дополнительных символа - только один для новой строки. Однако, если вы откроете его как двоичный файл, он действительно должен прочитать и CR, и LF.
Если вы используете Linux, как указано в комментариях, у нас есть больше диагностических инструментов. Пожалуй, проще всего начать с 'od -c file
'; это покажет вам, что именно в файле. Обратите внимание, что если файл когда-либо находился в окне Windows, он все равно мог иметь окончания строки CRLF Если вы используете 'vim', он может сказать, что тип файла - '[dos]'.
Кроме того, вы можете печатать символы в виде целых чисел (а также символов):
printf("%d (%2d) %c\n", i, line[i], line[i]);
Вы должны увидеть 49 для «1», 50 для «2», 44 для «,», 10 для новой строки (LF, «\n
») и что-то еще - это загадка (но это будет показать 13 для CR).
CR - это символ \r
в C-источнике. Он использовался для указания того, что печатающая головка должна вернуться в начало строки (каретка принтера вернулась в начало строки); LF или перевод строки прокручивали бумагу вверх по линии. Windows и MS-DOS используют последовательность CRLF (curr-liff) для обозначения конца строки; Unix всегда использовал только LF, aka newline или NL; MacOS 9 и более ранние версии использовали только CR.