(char *)0在c中的含义是什么?

时间:2011-05-20 13:53:03

标签: c syntax

if ( fgets( line, sizeof(line), stdin ) == (char*) 0 )...

我不明白这条线的作用,谁都知道?

6 个答案:

答案 0 :(得分:4)

这是一种编写测试的奇怪方法,用于返回空指针,指示fgets()中的错误。

我会这样写:

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

答案 1 :(得分:3)

(char*) 0

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

包含值0的字符将是:

(char) 0

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

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

但如果删除0,则隐式转换为char*

如果您需要有关fgets外观here

的更多信息

答案 4 :(得分:1)

(char *)0创建“null”指针。所以你看到fgets的值是否为null。

fgets的文档说明当出现错误或者你已经到达文件末尾时它返回null。

完整的陈述似乎在检查你是否在文件的末尾,如果是这样的话(尽管这是猜测)。

答案 5 :(得分:-1)

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

根据cplusplus.com

  

返回值

     

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

     

如果有错误   发生时,返回一个空指针。

     

使用ferror或feof进行检查   是否发生错误或   达到了文件结束。