[英]why size_t variable, int constant comparison doesn't work properly while off_t variable works fine?
[英]size_t comparison to 0 does not work, comparison to -1 does
我正在尝试编写非常简单的代码来从标准输入读取输入,一次一行。
编码
size_t size = 0;
size_t length = 1;
char* text = NULL;
while (length > 0) {
length = getline(&text, &size, stdin);
}
不终止于 EOF,当length = -1
,而
while (length != -1) {
length = getline(&text, &size, stdin);
}
做。
这怎么可能? 谢谢。
问题在这里:
size_t length = 1;
getline()的返回值是ssize_t
,而不是size_t
ssize_t
用于可以返回负错误指示(例如-1
每个getline()
定义)或正byte
值的函数。 size_t
应仅用于仅限于返回正byte
值的函数。
使用ssize_t length = 1;
作为替代声明。
旁白- 在您的示例中,您使用EOF
来帮助描述您意外丢失的错误情况。 正如@Jonathan Leffler 在评论中指出的那样,值得注意的是,因为它被标记为C
(而不是C++
),并且因为getline()
不是标准 C 库的一部分,所以它必须是GNU
扩展或POSIX
实现。 两者都明确地将return
错误条件定义为由-1
而不是EOF
表示。
getdelim()
。) 这个有趣的事实的重要性被最小化了,因为没有系统将EOF
定义为-1
以外的任何值。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.