回答
(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