6

我正在尝试使用此函数将单词写入文件:

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) 的手册页,我觉得我正确使用了它,有什么我遗漏的吗?

4

3 回答 3

9

试试这个:

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

于 2010-04-23T03:12:08.873 回答
0

文件句柄是否有效?你 fopen() 用“w”了吗?如果不是, fwrite() 将出现段错误。

函数本身实际上什么都不做,所以很明显 fwrite 调用是问题所在。检查论点。

于 2010-04-23T03:29:21.987 回答
0

out不包含文件的地址,而是包含您传入 main 的文件指针的地址。这个函数原型应该是这样的:

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

通过这种方式,您正在创建一个指向 main 中的指针的双指针,然后该指针指向该文件。

于 2018-10-16T17:44:17.290 回答