繁体   English   中英

size_t 与 0 的比较不起作用,与 -1 的比较有效

[英]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表示。

  • GNU - “如果发生错误或到达文件末尾而未读取任何字节,则 getline 返回 -1。”
  • POSIX - “...两个函数在读取一行失败时都返回 -1...” (另一个是getdelim() 。)

这个有趣的事实的重要性被最小化了,因为没有系统将EOF定义为-1以外的任何值。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM