if ( fgets( line, sizeof(line), stdin ) == (char*) 0 )...
我不明白这条线的作用,有人知道吗?
(char*) 0
不是空字符,而是指向地址0处的字符的指针。
包含值 0 的字符将是:
(char) 0
这是一种相当奇怪的编写空指针返回测试的方法,它指示
fgets()
中存在错误。
我会这样写:
if (!fgets(line, sizeof(line), stdin))
它的意思是指向char的空指针。如果将 (char*)0 替换为 NULL,效果是一样的。在这种特殊情况下,它正在检查是否没有更多内容可以从标准输入中读取。我认为这只是一种神秘的方式,并展示一些壮观和美丽的特征。如果将其替换为 NULL,则可以在不改变语义的情况下获得可读性。
该行检查
fgets
是否返回 0。转换为 char*
只是为了匹配 fgets
的返回类型:
char * fgets ( char * str, int num, FILE * stream );
但是如果删除它,0 会隐式转换为
char*
。
如果您需要有关
fgets
的更多信息,请查看 此处
(char*)0 创建“空”指针。所以你正在查看 fgets 的值是否为空。
fgets 的文档指出,当出现错误或已到达文件末尾时,它返回 null。
完整的语句似乎是在检查您是否位于文件末尾,以及是否超出(尽管这是猜测)。
它只是检查 fgets 的结果是否为空字符指针。
返回值
成功后,函数 返回相同的 str 参数。如果 遇到文件结尾并且没有 字符已被读取, str 的内容保持不变,a 返回空指针。
如果出现错误 发生时,返回空指针。
使用ferror或feof来检查 是否发生错误或 已到达文件末尾。