问题描述
我正在尝试编写极其简单的代码以一次从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
以外的任何系统,因此这一有趣事实的重要性被最小化。 :)