回答
(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. {0}是什麼意思?
- 3. 「char(&(...))[2]」是什麼意思?
- 4. char * argv []是什麼意思?
- 5. 'char x []'是什麼意思?
- 6. char&*是什麼意思?
- 7. GetDC(0&)是什麼意思?
- 8. yytext [0]是什麼意思?
- 9. $ .get(0)是什麼意思?
- 10. ecmascript 6中的「@」char是什麼意思?
- 11. UInt(0)是什麼意思?
- 12. `(c = * str)!= 0`是什麼意思?
- 13. = {0}是什麼意思;在C?
- 14. '\ 0'是什麼意思?
- 15. UML中的'0 ..°'是什麼意思?
- 16. 什麼是0;在javascript中的意思
- 17. AWS:0.0.0.0/0和::/0是什麼意思?
- 18. s [-1] = 0是什麼意思?
- 19. '[0]'與$('#div')[0]是什麼意思?
- 20. C中##是什麼意思?
- 21. 什麼!s || !*的意思? (S是char *)
- 22. 在Perl中,=〜/^0 $/mean是什麼意思?
- 23. 在JavaScript中,0 === 4是什麼意思?
- 24. 在bash中,dir = $ {0%/ *}是什麼意思?
- 25. 在Python中,「= 0」是什麼意思?
- 26. 在android中是什麼意思.0 dp?
- 27. 在Python中'[0]'是什麼意思?
- 28. (char *)x或(void *)z是什麼意思?
- 29. char * derp [20]是什麼意思?
- 30. int argc,char * argv []是什麼意思?
你難道不明白哪些部分呢? – crazyscot 2011-05-20 13:53:32
@Martinho:你可以擴展一下嗎? – 2011-05-20 13:55:41
@Martinho:是的,的確如此。當然,如果'line'是一個實際的數組類型,它就可以工作。 – 2011-05-20 13:59:47