如何解决size_t与0的比较不起作用,与-1的比较
我正在尝试编写极其简单的代码以一次从stdin读取输入。
代码
size_t size = 0;
size_t length = 1;
char* text = NULL;
while (length > 0) {
length = getline(&text,&size,stdin);
}
在length = -1
的同时,
while (length != -1) {
length = getline(&text,stdin);
}
确实。
这怎么可能?谢谢。
解决方法
问题在这里:
size_t length = 1;
getline()的返回值是ssize_t
,而不是size_t
ssize_t
用于可返回负 error 指示(例如,-1
的每个定义为getline()
)或正数byte
的函数。值。 size_t
仅应用于限制返回正byte
值的函数。
使用ssize_t length = 1;
作为替换声明。
在旁边 -在您的示例中,您使用EOF
帮助描述您意外丢失的错误情况。正如@Jonathan Leffler在评论中指出的那样,值得注意的是,因为它被标记为C
(而不是C++
),并且因为getline()
不是标准C库的一部分,所以它必须是GNU
扩展名或POSIX
实现。两者都将return
错误条件明确定义为由-1
而非EOF
表示。
由于没有EOF
被定义为-1
以外的任何系统,因此这一有趣事实的重要性被最小化。 :)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。