如何验证 C 中的标准输入是否为空? 我有一个学校项目,我们只允许使用 malloc、write、read 和 free,但我在网上找到的唯一解决方案使用了我不允许使用的功能。 除非您不在输入中添加任何内容,否则我的读取效果非常好。
这是我的代码:
char *ft_get_buffer(void)
{
char buf[10];
int ret;
int count;
char *result;
count = 0;
result = "";
while (1)
{
ret = read(0, buf, 10);
count += ret;
if (ret < 10)
{
buf[ret] = '\0';
result = ft_ralloc(buf, result, count);
break ;
}
else
result = ft_ralloc(buf, result, count);
}
return (result);
}
回显“测试”| ./mybinary//工作正常
echo ./mybinary//无限循环
最佳答案
read()
除非遇到 EOF 或发生信号事件,否则将阻塞。
所以代码将“坐在” read()
上直到发生以下 4 件事之一:
- 请求的数量
char
输入 s — 返回请求char
计数 - 遇到 EOF — 返回数量
char
s 读取,可以是0
- 出现信号 - 退出执行路径
- 发生 I/O 错误 — 返回
-1
要立即检查任何返回条件,请检查 ret
的值在将该值用于任何目的之前。
检查:
-
ret ==
请求数量char
s — 然后循环阅读更多内容 -
0 <= ret <
请求数量char
s — 遇到 EOF,进行相应处理 -
0 > ret
— 发生错误,处理错误
关于如果读取 0 为空,C 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33463101/