如果读取0为空,则C返回null

时间:2015-11-01 14:13:58

标签: c

如何验证C中的标准输入是否为空? 我有一个学校项目,我们只允许使用malloc,写,读和免费,但我在网上找到的唯一解决方案使用我不允许使用的功能。 我的阅读完美无缺,除非你没有把任何东西放在输入中。

这是我的代码:

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);
}
回声&#34;测试&#34; | ./mybinary //工作得很好 echo ./mybinary //无限循环

1 个答案:

答案 0 :(得分:0)

除非遇到EOF或发生信号事件,否则

read()将被阻止。

所以代码将会“坐下来”。在read()上,直到发生以下四件事之一:

  1. 输入所请求的char个数 - 返回请求char count
  2. 遇到EOF - 返回char次读取的数量,可以是0
  3. 发生信号 - 退出执行路径
  4. 发生I / O错误 - 返回-1
  5. 要检查任何返回条件立即检查ret的值,然后再将该值用于任何目的。

    检查:

    1. ret ==请求char s的数量 - 然后循环以阅读更多
    2. 0 <= ret <请求的char s - 遇到的EOF数量,相应处理
    3. 0 > ret - 发生错误,处理错误