Fputs создает проблему - PullRequest
       1

Fputs создает проблему

0 голосов
/ 14 марта 2011
fseek(ofile, 13, SEEK_SET);
fputs("\t", ofile);

do
{
     ch = getc(ofile);
     printf("%c", ch);

     if(ch == '\n') {
         fseek(ofile, 13, SEEK_CUR);
         fputs("\t", ofile);
     }
} while(ch != EOF);

Я написал эту программу, которая манипулирует файлом и вставляет \ t после определенной позиции в каждой строке. Всякий раз, когда я использую второй fputs, он делает файл нечитаемым. Почему это происходит?

1 Ответ

4 голосов
/ 14 марта 2011

Несколько вещей, на которые вы можете захотеть взглянуть:

  • fputs не вставляет что-либо, оно перезаписывает что бы там ни было. Другими словами, этот TAB символ просто перезапишет то, что было изначально. Если вы хотите вставить что-то, лучше написать программу типа фильтра, которая копирует символы из одного файла в другой, позволяя вносить изменения по пути (например, вставка, если последний символ новой строки был 13 символов назад, например).
  • Ваш fseek изменит текущую позицию как для записи , так и последующих getc операций. Это означает, что вам нужно следить за линиями короче, чем вы ожидаете.
  • Вы действительно должны проверить возвращаемые значения из fseek и fputs - возможно, они могут потерпеть неудачу.
  • После getc указатель файла находится на следующем символе, поэтому убедитесь, что вас интересуют именно четырнадцать символов после новой строки.
  • Остерегайтесь последней строки в файле. Маловероятно, что поиск на 13 байт будет работать, и вы все равно делаете fputs.

Если все это не удастся, выведите измененный файл в шестнадцатеричном режиме с помощью чего-то вроде Linuxy:

od -xcb myFileName.txt

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

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