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

标签 c

如何验证 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 件事之一:

  1. 请求的数量 char输入 s — 返回请求 char计数
  2. 遇到 EOF — 返回数量 char s 读取,可以是 0
  3. 出现信号 - 退出执行路径
  4. 发生 I/O 错误 — 返回 -1

立即检查任何返回条件,请检查 ret 的值在将该值用于任何目的之前。

检查:

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

关于如果读取 0 为空,C 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33463101/

相关文章:

c++ - GetAdaptersAddresses() 未给出正确的 IP 地址

c - 动态分配的字符串内存数组似乎不起作用

c - sizeof() 随同一个输入而变化

c - 传递 char* 作为参数会破坏程序,而 char[] 不会

c - 是否包含头文件

c - 将 dvb url 地址拆分为单独的值

c++ - MAC OS X下如何配置TCP_KEEPALIVE

C 套接字编程,select() 和 fd_set 的问题

c - Apache Avro C 安装

c - 使用 MPI_Gather 接收数据结构的正确方法