【问题标题】:Using strcmp() on STDIN_FILENO [duplicate]在 STDIN_FILENO 上使用 strcmp() [重复]
【发布时间】:2018-04-03 08:06:45
【问题描述】:
        char buf[BUF_SIZE + 1];
        printf("[Enter Command]: \n");
        num_read = read(STDIN_FILENO, buf, BUF_SIZE);
        if (num_read == 5) {
            exit(0);
        }

我想检查用户输入的字符串是否为"exit",如果是则退出程序。上面的 sn-p 有效,但它将在所有 4 个字母字符串上退出。我只希望它在字符串"exit" 上退出。

我不明白为什么下面的代码不起作用:

if (strcmp("exit", buf) == 0) {
    exit(0);
}

【问题讨论】:

  • 什么是exit_call?你还没有在任何地方定义它。只有显示所有相关的代码部分才能获得帮助。
  • @Binarus 抱歉,我已经更新了代码
  • 这是怎么失败的?
  • 您只需要在read调用后添加空字节:if (num_read > 0) buf[num_read] = '\0';
  • 只需在末尾添加 '\0' 替换 '\n' buf[strcspn(buf, "\n")] = '\0'

标签: c strcmp


【解决方案1】:

strcmp() 不起作用,因为read() 不是 0 终止输入,它不是在进行字符串输入。

使用例如fgets() 读取整行,然后检查它是否以 exit 开头(记住它将包含换行符)。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-17
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
  • 1970-01-01
相关资源
最近更新 更多