2011-08-08 45 views
0

您好我正在编程与Linux下的stdlib。警告:fopen()调用

gcc对下面的代码行发出以下警告,任何想法为什么?

FILE *fd; 
if (fd = fopen(filename, "rw")== NULL) 
{ 

和警告:

warning: assignment makes pointer from integer without a cast. 

这可怎么发生的,根据STDLIB文档的fopen的返回类型为FILE *。那么为什么还有警告呢?有什么想法?

--Thanks在Advance--

回答

6

尝试

if ((fd = fopen(filename, "rw")) == NULL) 
    ^      ^

否则fd将采取值为0或1,FILE *本身fopen返回将丢失。因此,如果没有括号,比较结果将存储在fd而不是FILE *本身。

+0

沃斯要注意的是==具有比=更高的优先级。这是首先执行的方式。 – taskinoor

+0

@taskinoor谢谢澄清。 – cnicutar

1

您实质上将fd指定为fopen(filename, "rw") == NULL,因为条件表达式是整数(0或1),所以您正在从整数中分配指针。关注@ cnicutar的答案修复

0
FILE *fd; 
if ((fd = fopen(filename, "rw"))== NULL) 
{ 

只是复制此代码,将工作.... 你刚才忘了把()以防万一 “FD = FOPEN(文件名, ”RW“)”