Какой смысл использовать * оба * возврат каретки и перевод строки? - PullRequest
4 голосов
/ 28 января 2011

Я бы подумал, что одного достаточно. Но какой смысл делать CRLF (0x0D0A), когда вы можете просто использовать CR (0D)? Обычно, когда я использую строки (C ++), я делаю это:

myString = "Test\nThis should be a new line!\nAnother linefeed.";

ПРИМЕЧАНИЕ. Для программистов не на C ++, читающих это, "\n" - это перевод строки (0x0A).

Но я должен действительно делать это:

myString = "Test\r\nThis should be a new line!\r\nAnother carriage return/linefeed pair.";

ПРИМЕЧАНИЕ: "\r" означает возврат каретки (0x0D).


РЕДАКТИРОВАТЬ: Если это должно быть на программистов. SE?

Ответы [ 4 ]

15 голосов
/ 28 января 2011

Помните, что все эти коды пришли со старых машин Teletype.По сути, это были пишущие машинки: необходимо было продвигать бумагу по одной строке (перевод строки), а также возвращать печатающую головку (на каретке) к левой стороне бумаги (возврат каретки).

1 голос
/ 28 января 2011

В системах Windows / Unix / старых Mac каждый способ записи новых строк в текстовых файлах (а не в двоичных) различен.Если вы программируете под Windows, то в двоичном режиме вы будете читать (и, вероятно, захотите написать) окончания CRLF.В Unix-подобных системах это будет просто LF.

Если вы работаете со своими собственными форматами данных ... не должно иметь значения, какой путь вы выберете.На самом деле все зависит только от того, что вы хотите сделать со строкой и откуда вы ее взяли.

1 голос
/ 28 января 2011

Некоторые системы, такие как UNIX и OSX, просто используют перевод строки, DOS использовал дополнительный возврат каретки для совместимости с телетайпами, а Windows унаследовала архитектуру.

0 голосов
/ 28 января 2011

Вы используете оба в Windows, потому что это обычное в Windows.Это так просто.Но вы пишете только для файлов, предназначенных для Windows.

...