(char *)0 在 C 中是什么意思?

问题描述 投票:0回答:6
if ( fgets( line, sizeof(line), stdin ) == (char*) 0 )...

我不明白这条线的作用,有人知道吗?

c syntax
6个回答
4
投票
(char*) 0

不是空字符,而是指向地址0处的字符的指针。

包含值 0 的字符将是:

(char) 0

4
投票

这是一种相当奇怪的编写空指针返回测试的方法,它指示

fgets()
中存在错误。

我会这样写:

if (!fgets(line, sizeof(line), stdin))

2
投票

它的意思是指向char的空指针。如果将 (char*)0 替换为 NULL,效果是一样的。在这种特殊情况下,它正在检查是否没有更多内容可以从标准输入中读取。我认为这只是一种神秘的方式,并展示一些壮观和美丽的特征。如果将其替换为 NULL,则可以在不改变语义的情况下获得可读性。


1
投票

该行检查

fgets
是否返回 0。转换为
char*
只是为了匹配
fgets
的返回类型:

char * fgets ( char * str, int num, FILE * stream );

但是如果删除它,0 会隐式转换为

char*

如果您需要有关

fgets
的更多信息,请查看 此处


1
投票

(char*)0 创建“空”指针。所以你正在查看 fgets 的值是否为空。

fgets 的文档指出,当出现错误或已到达文件末尾时,它返回 null。

完整的语句似乎是在检查您是否位于文件末尾,以及是否超出(尽管这是猜测)。


-2
投票

它只是检查 fgets 的结果是否为空字符指针。

根据cplusplus.com

返回值

成功后,函数 返回相同的 str 参数。如果 遇到文件结尾并且没有 字符已被读取, str 的内容保持不变,a 返回空指针。

如果出现错误 发生时,返回空指针。

使用ferror或feof来检查 是否发生错误或 已到达文件末尾。

© www.soinside.com 2019 - 2024. All rights reserved.