【问题标题】:How do you detect ctrl+D in C?你如何检测 C 中的 ctrl+D?
【发布时间】:2015-03-22 07:18:44
【问题描述】:

所以我用 fgets 读了一行

line = fgets(l, BUFSIZ, stdin);

据我了解 control+d 是 EOF,所以我尝试了

if(line[0] == EOF)
     continue;

回到循环的顶部。但这导致了段错误......还有其他方法吗?

【问题讨论】:

  • 来自 Linux 中的 fgets 手册页:fgets() 在成功时返回 s,在错误或未读取字符时出现文件结尾时返回 NULL。
  • Ctrl-D 是特定于操作系统的(在 C99 标准中未指定)。在 Linux 上,Ctrl-D is not a character 但通常是 文件结束 条件

标签: c segmentation-fault stdin eof fgets


【解决方案1】:

由于机器在 Ctrl + D 上生成EOF,因此您应该检查fgets() 中的NULL,因为fgets() 必须在文件末尾返回NULL

line = fgets(l, BUFFSIZ, stdin)
if (line == NULL)
    continue;

在您的代码中,您试图取消引用 NULL 导致段错误的指针。

【讨论】:

    【解决方案2】:

    在流中检查feof(),或进行额外读取并检查line 中的NULL

    当您尝试将其与 EOF 进行比较时,您遇到了段错误,因为 lineNULL

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 2011-02-23
      • 2014-02-11
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      相关资源
      最近更新 更多