fwrite написать целое число

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

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) и чувствую, что использовал ее правильно, что-то мне не хватает?


person user149100    schedule 23.04.2010    source источник
comment
Какая платформа / компилятор? Вопросы выравнивания могут иметь значение.   -  person abelenky    schedule 23.04.2010
comment
Какая платформа / компилятор? Проблемы с выравниванием могут иметь значение. ‹Br› Можно ли успешно записать что-нибудь еще в файл? Я подозреваю, что ваш out-файл не открывается должным образом.   -  person abelenky    schedule 23.04.2010
comment
просто убедитесь, что out не NULL, остальное в порядке.   -  person N 1.1    schedule 23.04.2010
comment
когда я тестировал этот код, я не думал и решил записать в тестовый файл под названием test, который также был именем двоичного файла моей тестовой программы, что дало мне segfault. ›.‹ Итак, сама функция в порядке, просто убедитесь, что то, что вы ей передаете, является допустимым, как предлагали N 1.1 и другие.   -  person Paige Ruten    schedule 23.04.2010


Ответы (3)


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

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?

person tylerl    schedule 23.04.2010
comment
Ха-ха. В порядке. Спасибо. Но теперь все, что он делает, - это отображение, держу пари, вы видели ЭТО. self-facepalm Это произошло не в первый раз и не будет в последний раз ... Функция была extern, потому что я пишу библиотеку, которую буду использовать для системного программирования класс в следующей четверти ... - person user149100; 23.04.2010
comment
Если ваш FILE* NULL, это обычно означает, что вы либо забыли его открыть, либо ваше открытие не удалось. Проверьте страницу руководства для fopen (предположительно, это то, что вы используете). - person tylerl; 26.04.2010
comment
Эта платформа независима? Я говорю о проблемах с порядком следования байтов. - person Tomáš Zato - Reinstate Monica; 09.01.2017

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

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

person Paul Richter    schedule 23.04.2010

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

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

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

person Najeeb Uddin    schedule 16.10.2018