2016-12-13 17 views
0

我已經在寫模式下嘗試過使用fopen()來試試看它是否返回NULL。我試圖打開同名多個文件,並輸入無效的文件名。顯然,fopen()並不關心被回收的名稱,因爲它每次都會打開一個新文件並覆蓋任何現有數據。輸入無效的文件名稱只會導致命令行錯誤。我試過的測試用例都沒有導致fopen()返回NULL。stdio.h函數fopen()在「w」模式下的錯誤場景

這是我在日常編程中遇到的東西,但我始終遵循永不假定文件總能被成功打開的理念。因此,我總是錯誤地檢查每個文件指針,而不管我在用文件做什麼。

但是,爲了充分了解文件I/O,我發現自己好奇:fopen()會在「w」模式下返回NULL的情況是什麼?

+0

歡迎來到Stack Overflow。 請注意,在這裏說'謝謝'的首選方式是通過 提高投票的好問題和有用的答案(一旦你有足夠的聲譽這樣做),並接受任何 問題最有用的答案,你問(這也給你一個小小的提升,以你的聲望 )。 請參閱[關於]頁面,以及[如何在此處提問 ?]和 [當有人回答我的 問題時,我該怎麼辦? ?](http://stackoverflow.com/help/someone-answers) –

回答

1

嘗試在不存在的目錄中打開文件,或者無權覆蓋的文件或文件名中包含無效字符的文件。在這些情況下你會很快得到NULL。

您的理念是一個很好的方法,通常是一個好主意,檢查任何調用可能會失敗。當然,這條規則有例外情況,我不會檢查每個呼叫的回報價值,但通常是因爲它不太可能在稍後的程序中咬我。

+0

我沒有想到這一點。權限尤其如此。謝謝。至於文件名中的無效字符,在什麼情況下會發生這種情況?我試圖用無效字符做,但它只是導致一個bash錯誤。 –

+0

你可以在C中使用'bash'可能不允許的字符。例如,嘗試在NTFS下使用'*'或':'。但是,說實話,權限/無目錄可能是最大的。 – paxdiablo