2013-05-30 3 views
0

Хорошо, я планирую сделать файл для хранения данных, которые я буду импортировать в программу. Эта программа должна быть скомпилирована для Linux, Windows и, возможно, для Mac.Преобразование stdin и stdout в C++ между CR + LF и LF и CR

Теперь, что я действительно хочу знать, нужны ли мне эти файлы данных, которые будут немного отличаться из-за символа новой строки в этих файлах или не будут придирчивы к тому, в какой системе я нахожусь?

Будет ли это проблемой или нет? Если да, то каков правильный способ преодоления этих проблем? Также есть ли какие-либо другие проблемы, которые я, возможно, просматриваю?

+0

Я предполагаю, что вы хотите иметь возможность передавать эти файлы между платформами? –

+0

Извините, я не прояснил это? Да, и я хочу знать, будет ли программа, скомпилированная в Windows с использованием stdin, обрабатывать LF и CR LF как одно и то же. – PhobicHD

+0

Прочтите это, вам нужно открыть файл в двоичном формате: http://stackoverflow.com/questions/11305479/reading-files-with-dos-line-endings-using-fgets-on-linux – ruben2020

ответ

0

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

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

В качестве альтернативы, один из простейших способов преодоления этой проблемы в платформе-агностическом способе для текстовых файлов, предназначенных для чтения пользователем, заключается в том, чтобы жадно использовать все смежные символы \ r и \ n как однострочное завершение, и вам не придется беспокоиться о том, как вы его выводите.

+0

Спасибо, что это точно что мне было интересно. Вопрос ответил. – PhobicHD