回答
(char*) 0
不是空字符,而是指向地址爲0的字符的指針。
一個包含值0將字符:
(char) 0
但'(char *)0'與'0'相同,對嗎? – 2011-05-20 14:01:42
它不是指向字符@地址0的指針,它是指向空字符的指針(http://www.lysator.liu.se/c/c-faq/c-1.html) – KevinDTimm 2011-05-20 14:07:56
@KevinDTimm char * c = (char *)0指向0,無論哪個值都可能存在(儘管它在大多數平臺上都不重要,它會成爲非法內存)。 – Hyperboreus 2011-05-20 14:10:27
這意味着一個空指針字符。如果用NULL替換(char *)0,它將是相同的。在這個特定的情況下,它正在檢查是否沒有更多的東西從標準輸入讀取。我認爲這只是一種神祕的方式,展現出一些壯觀而美麗的特徵。如果將它替換爲NULL,則可以在不改變語義的情況下獲得可讀性。
實際上,它意味着一個指向空字符的指針 - 有區別 – KevinDTimm 2011-05-20 14:05:18
@Kevin實際上,它沒有。 fgets()返回一個可能爲NULL的指針。所以這段代碼只是將結果與NULL進行比較的一種奇怪的方式,它與nul字符無關。 – Lundin 2011-05-20 14:13:43
忽略fgets(),恕我直言(char *)0表示 - 指向空字符的指針,或者char指針指向null,但不指向char指針的空指針 - 它似乎只是語義,但我相信是有區別的。 – KevinDTimm 2011-05-20 14:18:24
線檢查,如果fgets
返回0。投地char*
僅僅是匹配的fgets
返回類型:
char * fgets (char * str, int num, FILE * stream);
但0是隱式轉換爲char*
,如果你刪除它。
如果您需要更多的信息,fgets
看here
很簡單,就是檢查與fgets爲空字符指針的結果。
返回值
成功時, 返回相同的STR參數的功能。如果遇到 文件結尾,並且沒有讀取 個字符,則str的 內容保持不變,並返回空指針 。
如果發生錯誤 ,則返回空指針。
使用ferror或feof檢查 是否發生錯誤或者是否已達到 文件結尾。
這是一個非常奇怪的方式來編寫一個空指針的返回測試,它指示fgets()
中的錯誤。
我會寫這樣的:
if (!fgets(line, sizeof(line), stdin))
這就是個人品味。我個人的口味總是與'NULL'比較,因爲它遵循函數的語義(它不返回布爾值)。 – 2011-05-20 14:01:35
我同意Oli的觀點,並且這種觀點也被廣泛認可的MISRA-C標準所共享。只有布爾表達式應與布爾運算符進行比較。 – Lundin 2011-05-20 14:10:52
@Oli @Lundin我的感覺是,你不能在母豬的耳朵上製作一個絲質的錢包,而且嘗試一點也不麻煩。 – 2011-05-20 14:45:26
(字符*)0創建 「空」 指針。所以你看到fgets的值是否爲空。
fgets的文檔指出,如果出現錯誤或者文件已到達文件結尾,它將返回null。
完整的語句似乎是檢查,如果你在文件的末尾,如果是這樣爆發(儘管這是一個猜測)。
- 1. 什麼(char *)0是什麼意思?
- 2. 'char x []'是什麼意思?
- 3. 「char(&(...))[2]」是什麼意思?
- 4. GetDC(0&)是什麼意思?
- 5. = {0}是什麼意思;在C?
- 6. UML中的'0 ..°'是什麼意思?
- 7. AWS:0.0.0.0/0和::/0是什麼意思?
- 8. 在JavaScript中,0 === 4是什麼意思?
- 9. 「const char(&a)[N]」是什麼意思?
- 10. (char *)x或(void *)z是什麼意思?
- 11. (const char * restrict,...)是什麼意思?
- 12. my_string(char * s)是什麼意思?
- 13. int argc,char * argv []是什麼意思?
- 14. 是什麼意思:是什麼意思?
- 15. 什麼?在C#中是什麼意思?
- 16. this.allow =!1和this.allow =!0是什麼意思?
- 17. (void)sizeof(0 [array])是什麼意思?
- 18. 這裏的「= 0」是什麼意思?
- 19. 在C#中的字符串中發現{0}是什麼意思?
- 20. 在C中,「void(* parse_arg_function)(const char *)」函數參數是什麼意思?
- 21. 「somevar >> 0」是什麼意思?
- 22. sc-status 0是什麼意思?
- 23. 這是什麼意思-c
- 24. %* c是什麼意思?
- 25. 這是什麼意思 - C#
- 26. cmd/C是什麼意思?
- 27. 這是什麼意思? [c#]
- 28. 在聲明方法時,C++中的= 0是什麼意思?
- 29. x%2 == 0是什麼意思?
- 30. 這個切片是什麼意思[:,:,0]?
你難道不明白哪些部分呢? – crazyscot 2011-05-20 13:53:32
@Martinho:你可以擴展一下嗎? – 2011-05-20 13:55:41
@Martinho:是的,的確如此。當然,如果'line'是一個實際的數組類型,它就可以工作。 – 2011-05-20 13:59:47