написать написать целое число - PullRequest
4 голосов
/ 23 апреля 2010

Я пытаюсь записать слово в файл, используя эту функцию:

extern void write_int(FILE * out, int num) {
   fwrite(&num,sizeof(int),1, out);
   if(ferror(out)){
      perror(__func__);
      exit(EXIT_FAILURE);
   }
}

Но я получаю ошибку сегментации всякий раз, когда она пытается запустить fwrite. Я посмотрел справочную страницу для fwrite (3) и чувствую, что использовал ее правильно, что-то мне не хватает?

Ответы [ 3 ]

6 голосов
/ 23 апреля 2010

Попробуйте вместо этого:

void write_int(FILE * out, int num) {
   if (NULL==out) {
       fprintf(stderr, "I bet you saw THAT coming.\n");
       exit(EXIT_FAILURE);
   }
   fwrite(&num,sizeof(int),1, out);
   if(ferror(out)){
      perror(__func__);
      exit(EXIT_FAILURE);
   }
}

А почему была ваша оригинальная функция extern?

0 голосов
/ 16 октября 2018

out не содержит адрес файла, скорее он содержит адрес указателя файла, который вы передали в main. Этот прототип функции должен выглядеть так:

extern void write_int(FILE * & out, int num);

Таким образом вы создаете двойной указатель на указатель в main, который затем указывает на файл.

0 голосов
/ 23 апреля 2010

Допустим ли дескриптор файла?Вы fopen () с "W"?fwrite () будет segfault, если это не так.

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

...