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

57hvy0tb  于 12个月前  发布在  其他
关注(0)|答案(6)|浏览(213)
if ( fgets( line, sizeof(line), stdin ) == (char*) 0 )...

字符串
我不明白这条线是干什么的,有人知道吗?

oo7oh9g9

oo7oh9g91#

(char*) 0

字符串
不是空字符,而是指向地址为0的字符的指针。
包含值0的字符为:

(char) 0

chy5wohz

chy5wohz2#

这是一种相当奇怪的编写返回空指针的测试的方式,它指示fgets()中的错误。
我会这样写:

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

字符串

rlcwz9us

rlcwz9us3#

它意味着一个指向char的空指针。如果你用NULL替换(char*)0,它也是一样的。在这个特定的例子中,它检查是否没有更多的东西可以从标准输入中读取。我认为这只是一种神秘的方式,展示了一些壮观而美丽的功能。如果你用NULL替换它,你会在不改变语义的情况下获得可读性。

mklgxw1f

mklgxw1f4#

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

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

字符串
但是如果删除0,它会隐式转换为char*
如果您需要有关fgets的更多信息,请查看here

hpxqektj

hpxqektj5#

(char* )0创建了“null”指针。所以你可以看到fgets的值是否为null。
fgets的文档指出,当出现错误或到达文件末尾时,它返回null。
完整的语句似乎是在检查您是否在文件的末尾,如果是,则进行中断(尽管这是猜测)。

mutmk8jj

mutmk8jj6#

它只是检查fgets的结果是否为空字符指针。
根据cplusplus.com

返回值

如果函数执行成功,则返回相同的str参数。如果遇到文件结束并且没有读取任何字符,则str的内容保持不变,并返回空指针。
如果发生错误,则返回空指针。
使用ferror或feof检查是否发生错误或到达文件结尾。

相关问题