\n символы перед EOF в файле вызывают проблемы

Я записал некоторые данные в файл вручную, т.е. не моим приложением.

Мой код считывает данные по символам и сохраняет их в разных массивах, но моя программа зависает, когда я вставляю условие EOF.

После некоторого расследования я обнаружил, что в моем файле перед EOF есть три-четыре символа \n. я их не вставлял. Я не понимаю, почему они в моем файле.


person tariq    schedule 03.04.2011    source источник
comment
Какой редактор вы используете для редактирования данных? Если вам нужен этот уровень контроля — например, отсутствие завершающих символов \n — рекомендуется использовать шестнадцатеричный редактор (например, bvi), а не обычный текстовый редактор.   -  person Johan Kotlinski    schedule 03.04.2011
comment
Вам не хватает ; в строке 42 вашего кода.   -  person pmg    schedule 03.04.2011


Ответы (2)


Хотите удалить эти надоедливые дополнительные символы? Во-первых, посмотрите, сколько их в конце вашего файла:

od -c <filename> | tail

Затем удалите столько символов, которые вам не нравятся. Если это 3:

truncate -s -3 <filename>

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

person John Zwinck    schedule 03.04.2011
comment
сэр, есть ли способ удалить эти символы с помощью программирования на С? - person tariq; 03.04.2011
comment
Конечно, просто читайте файл по одному символу за раз, пока не найдете символ, который вам не нравится, а затем вызовите функцию C ftruncate() для дескриптора файла, передав количество прочитанных байтов, которые вам понравились. - person John Zwinck; 03.04.2011

  1. В любом текстовом редакторе очень легко добавить дополнительные строки новой строки в конец файла. Чтобы увидеть их, вам нужно навести курсор. Откройте файл в редакторе и посмотрите, что произойдет, когда вы перейдете в конец, вы увидите дополнительные новые строки.

  2. Вообще не существует такого понятия, как символ EOF. В некоторых случаях Windows обрабатывает control-Z как EOF. Возможно, вы говорите о возвращаемом значении из какого-то API, которое указывает, что он достиг конца файла?

person bmargulies    schedule 03.04.2011
comment
спасибо, сэр, но есть ли способ, с помощью которого я могу удалить их, используя язык C? - person tariq; 03.04.2011