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