2010-04-23 40 views
3

我试图写一个字到使用此功能的文件:的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)的手册页,我觉得我正确使用了它,有什么我错过了吗?

+0

什么平台/编译器?一致性问题可能很重要。 – abelenky 2010-04-23 03:04:14

+2

只要确保'out'不是'NULL',休息就好了。 – 2010-04-23 03:14:32

+0

当我测试这段代码时,我没有想到,并决定写一个名为“test”的测试文件,这也是我的测试程序的二进制文件的名称,它给了我一个段错误。 >。所以函数本身很好,只要确定你传入的是有效的,正如N 1.1和其他人所建议的那样。 – 2010-04-23 03:23:19

回答

5

试试这个:

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

+1

哈哈。好。谢谢。但现在它所做的只是展示“我敢打赌,你看到了这个来临。” *自捂脸* 这已经不是第一次发生了,也不会是最后一次...... 功能是因为的extern我写,我会使用的系统库编程类下一季... – user149100 2010-04-23 03:27:56

+0

哈哈在心理调试的效果 – Joshua 2010-04-23 03:44:48

+0

如果你的'FILE *'是'NULL',那通常意味着你忘了打开它,或者你的打开失败。检查手册页上的“fopen”(大概这就是你正在使用的)。 – tylerl 2010-04-26 05:22:06

0

什么平台/编译器?一致性问题可能很重要。

您可以成功写入其他任何文件吗?我怀疑你的文件可能无法正常打开。

+0

提示:fwrite需要void *并将其转换为char *以便align =不是问题 – Joshua 2010-04-23 03:45:26

0

文件句柄是否有效?你打开()“w”了吗?如果不是,则fwrite()会进行段错误。

该函数本身确实没有什么,所以它显然是fwrite调用,这是问题。检查参数。