2013-01-17 35 views
1

這兩個語句之間的區別是什麼,哪個是正確的,應該使用什麼?文件IO中兩個語句的區別是什麼

fp是使用的文件指針。

if(fp!= '\n') 

得到一個警告

C4047: '!=' : 'FILE *' differs in levels of indirection from 'int' 

if(fp!= NULL) 

沒有得到任何警告。

完整的代碼片段如下

if(fp!= NULL) 
    { 
     fgets(mystring,BUFSIZ,fp); 
     puts(mystring); 
    } 
+4

第一個是無稽之談。 – Pubby

+0

fp是一個指針,'\ n'是一個字符。 NULL是一個指針。我同意,使用不是指針的東西檢查指針的等式是無稽之談。 – yattering

+2

@yattering其實''\ n''的類型爲'int',請參閱編譯器錯誤。它不是'char'。 – unwind

回答

2

什麼是兩個語句之間的性差異,並且是正確的,應該用什麼呢?

關於區別:
fp != '\n'試圖指針比較的整數。這沒有意義。
fp != NULL檢查fp是否爲空指針。這是一個明智的做法。

關於哪一個是正確的:
這個問題假設其中一個實際上是正確的。 (但是fp != '\n'肯定是不正確的。)

關於應該使用什麼:
這取決於你想要做什麼。

此代碼:

fgets(mystring,BUFSIZ,fp); 
puts(mystring); 

也是越野車,因爲你忽略了fgets的返回值,它會告訴你fgets是否成功,因此是否mystring被設置爲一個有效的字符串。

+0

是的,謝謝。,刪除我的評論.. – Shash

1

'\n'Cint類型和所用文件指針fp必須聲明爲在你的代碼FILE* fp比較它。所以這行是if(fp!= '\n')錯誤,意思不大。將FILE*int進行比較。

正確的是:

if(fp!= NULL)檢查是否fp指向的不是一個有效的文件。

fp = fopen("filename","r"); 
: 
: 
if(fp!= NULL) 
{ // if file open successfully 
    fgets(mystring,BUFSIZ,fp); 
    puts(mystring); 
} 

fp = fopen("filename","r");如果功能fopen()無法打開返回NULL的文件。

因爲在代碼fgets使用我爲什麼用戶"r"模式..

相關問題