2011-08-08 99 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「)」