if ( fgets( line, sizeof(line), stdin ) == (char*) 0 )...
字符串我不明白这条线是干什么的,有人知道吗?
oo7oh9g91#
(char*) 0
字符串不是空字符,而是指向地址为0的字符的指针。包含值0的字符为:
(char) 0
型
chy5wohz2#
这是一种相当奇怪的编写返回空指针的测试的方式,它指示fgets()中的错误。我会这样写:
fgets()
if (!fgets(line, sizeof(line), stdin))
字符串
rlcwz9us3#
它意味着一个指向char的空指针。如果你用NULL替换(char*)0,它也是一样的。在这个特定的例子中,它检查是否没有更多的东西可以从标准输入中读取。我认为这只是一种神秘的方式,展示了一些壮观而美丽的功能。如果你用NULL替换它,你会在不改变语义的情况下获得可读性。
mklgxw1f4#
该行检查fgets是否返回0。转换为char*只是为了匹配fgets的返回类型:
fgets
char*
char * fgets ( char * str, int num, FILE * stream );
字符串但是如果删除0,它会隐式转换为char*。如果您需要有关fgets的更多信息,请查看here
hpxqektj5#
(char* )0创建了“null”指针。所以你可以看到fgets的值是否为null。fgets的文档指出,当出现错误或到达文件末尾时,它返回null。完整的语句似乎是在检查您是否在文件的末尾,如果是,则进行中断(尽管这是猜测)。
mutmk8jj6#
它只是检查fgets的结果是否为空字符指针。根据cplusplus.com
返回值
如果函数执行成功,则返回相同的str参数。如果遇到文件结束并且没有读取任何字符,则str的内容保持不变,并返回空指针。如果发生错误,则返回空指针。使用ferror或feof检查是否发生错误或到达文件结尾。
6条答案
按热度按时间oo7oh9g91#
字符串
不是空字符,而是指向地址为0的字符的指针。
包含值0的字符为:
型
chy5wohz2#
这是一种相当奇怪的编写返回空指针的测试的方式,它指示
fgets()
中的错误。我会这样写:
字符串
rlcwz9us3#
它意味着一个指向char的空指针。如果你用NULL替换(char*)0,它也是一样的。在这个特定的例子中,它检查是否没有更多的东西可以从标准输入中读取。我认为这只是一种神秘的方式,展示了一些壮观而美丽的功能。如果你用NULL替换它,你会在不改变语义的情况下获得可读性。
mklgxw1f4#
该行检查
fgets
是否返回0。转换为char*
只是为了匹配fgets
的返回类型:字符串
但是如果删除0,它会隐式转换为
char*
。如果您需要有关
fgets
的更多信息,请查看herehpxqektj5#
(char* )0创建了“null”指针。所以你可以看到fgets的值是否为null。
fgets的文档指出,当出现错误或到达文件末尾时,它返回null。
完整的语句似乎是在检查您是否在文件的末尾,如果是,则进行中断(尽管这是猜测)。
mutmk8jj6#
它只是检查fgets的结果是否为空字符指针。
根据cplusplus.com
返回值
如果函数执行成功,则返回相同的str参数。如果遇到文件结束并且没有读取任何字符,则str的内容保持不变,并返回空指针。
如果发生错误,则返回空指针。
使用ferror或feof检查是否发生错误或到达文件结尾。