簡體   English   中英

(char *)0在c中的含義是什么?

[英]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結果。

根據cplusplus.com

回報價值

成功時,該函數返回相同的str參數。 如果遇到文件結尾且未讀取任何字符,則str的內容保持不變,並返回空指針。

如果發生錯誤,則返回空指針。

使用ferror或feof檢查是否發生錯誤或是否已達到文件結尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM