[英]What does (char *)0 mean in c?
if ( fgets( line, sizeof(line), stdin ) == (char*) 0 )...
我不明白這條線的作用,誰知道呢?
這是一種編寫測試的奇怪方法,用於返回空指針,指示fgets()
的錯誤。
我寫的是這樣的:
if (!fgets(line, sizeof(line), stdin))
(char*) 0
不是空字符,而是指向地址0處字符的指針。
包含值0的字符將是:
(char) 0
它表示指向char的空指針。 如果用NULL替換(char *)0,它將是相同的。 在這種特殊情況下,它正在檢查是否沒有更多內容可以從標准輸入讀取。 我認為這只是一種神秘的方式,並展示了一些壯觀而美麗的特征。 如果用NULL替換它,則可以在不改變語義的情況下獲得可讀性。
該行檢查fgets
返回0.轉換為char*
只是為了匹配fgets
的返回類型:
char * fgets ( char * str, int num, FILE * stream );
但如果刪除0,則隱式轉換為char*
。
如果您需要有關fgets
更多信息,請查看此處
(char *)0創建“null”指針。 所以你看到fgets的值是否為null。
fgets的文檔聲明當出現錯誤或者您已到達文件末尾時它返回null。
完整的陳述似乎是在檢查你是否在文件的末尾,如果是這樣的話(盡管這是猜測)。
它只是檢查空字符指針的fgets結果。
回報價值
成功時,該函數返回相同的str參數。 如果遇到文件結尾且未讀取任何字符,則str的內容保持不變,並返回空指針。
如果發生錯誤,則返回空指針。
使用ferror或feof檢查是否發生錯誤或是否已達到文件結尾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.