Добавление символов конца строки в файл приводит к его повреждению ..? - PullRequest
0 голосов
/ 29 апреля 2018

Я создаю оболочку и пытаюсь заставить обработку комментариев работать. Я могу передать в текстовом файле в качестве параметра. У меня есть текстовый файл «вывод», который выглядит следующим образом:

123
#456
$#789

и я хочу "завершить" любые строки, начинающиеся с '#', заменив # на '\0'.

int removeComments(char* fileName){ 
   FILE* myfile;
   int c;
   myfile = fopen(fileName, "r+");
   if(myfile == NULL){
      fprintf(stderr, "cannot open %s\n", fileName);
      exit(-1);
   }

   while((c = fgetc(myfile)) != EOF){

      if(c == '$'){
         c = fgetc(myfile);       // (don't change '$#')
      }
      else if(c == '#'){
         fseek(myfile, -1, SEEK_CUR);
         fputc('\0', myfile);                 //replace '#' with '\0'
         fseek(myfile, 0, SEEK_CUR);
      }
   }
   return 0;
}

Если я сделаю так, чтобы я заменил '#' на '!' или любой другой символ, это прекрасно работает, изменив файл так:

123
!456
$#789

Однако после того, как я запустил этот код и ввел символы конца строки, я больше не могу открыть свой файл, мой компьютер говорит "Could not display "output". The file is of an unknown type". Как я могу предотвратить это? Или, если нужно, как я могу обойти это?

1 Ответ

0 голосов
/ 29 апреля 2018

Многие редакторы не позволяют открывать файлы с '\ 0' в них. Vim, например, может показать файл. Но гедить не может. Вы можете попробовать предложение, данное в https://superuser.com/questions/246014/use-gedit-to-open-file-with-null-characters.

...