2012-11-29 108 views
1

我是C編程的新手,但我正在掌握它。我正在處理一個FILE函數,該函數永遠不會返回NULL。即使文件不存在並且初始化爲「r」,也會發生這種情況。代碼已經工作過,但之後它一直保持返回TRUE。我已經用多種方式編寫了代碼,但都是作爲文件返回的。我甚至改變了文件名來創建一個完全不同的文件,但仍然得到相同的結果。任何幫助都會很棒。提前致謝。NULL不初始化

編輯: 謝謝大家。我已經得到它的工作。

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    FILE *fp; 

    fp = fopen("c:\\lest.txt", "w"); 
    if(fp == NULL) 
     { 
     printf("File Not Available\n"); 
     exit(0); 
     } 

    fclose(fp); 

    return 0; 
} 
+1

我使用的代碼塊的手冊頁。 –

回答

4

您需要檢查fp對null,而不是fopen。

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    FILE *fp; 

    fp = fopen("c:\\lest.txt", "r"); 
    if(fp == NULL) 
     { 
     printf("File Not Available\n"); 
     exit(0); 
     } 

    fclose(fp); 

    return 0; 
} 
+0

@Technical_Customs:你是否知道你編輯了一個答案而不是你的問題? fopen()工作正常。但是這裏似乎有點混亂。 –

+0

對不起。我注意到當我做到了。我很習慣通過手機查看本網站。 –

3

相反測試fopen爲空的,改變的條件來測試fpNULL代替:

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    FILE fp*; 

    fp = fopen("c:\\lest.txt", "r"); 
    if(fp == NULL) 
    { 
     printf("File Not Available\n"); 
     exit(0); 
    } 

    fclose(fp); 

    return 0; 
} 
4
fp = fopen("c:\\lest.txt", "r"); 
if(fopen == NULL) 

這些線是錯了。 fopen()是一個標準功能。所以fopen(不含括號)始終是非空,因爲它代表的fopen()函數指針。

你應該做的是檢查的fopen()返回值。在這種情況下,這是fp

if(fp==NULL){ 
    perror("fopen"); 
    exit(1); 
} 

還要注意,

  1. 要打印確切的錯誤,你應該使用perror()功能。
  2. exit(0)將返回0到OS。這表明成功。更好地使用exit(1)
+0

(fp == NULL)在代碼 –

+1

@Technical_Customs:不,它不是。 –

+0

對不起,在編輯代碼。謝謝。 –

0

爲u是說,即使更改文件名&然後調用計劃生育=的fopen( 「C:\ lest.txt」, 「W」);甚至有名字不存在的文件lest.txt,u得到FP!= NULL

這是因爲,如果指定的文件不存在,則在則fopen()函數指定的名稱創建新文件,然後它的返回文件指針,所以我覺得你已經得到了UR答案。

更多信息,請參見功能fopen()函數http://linux.die.net/man/3/fopen

相關問題