你如何检测C中的ctrl + D?

时间:2015-03-22 07:18:44

标签: c segmentation-fault stdin eof fgets

所以我使用fgets读了一行

line = fgets(l, BUFSIZ, stdin);

我从我的理解中控制+ d是EOF所以我试过

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

回到循环的顶部。但这导致了段错误......还有另一种方式吗?

2 个答案:

答案 0 :(得分:5)

由于机器在 Ctrl + D 上生成EOF,您应该fgets()检查NULL,因为fgets()有义务返回NULL在文件末尾。

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

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

答案 1 :(得分:0)

检查信息流中的feof(),或进行额外阅读并检查NULL中的line

当您尝试将lineNULL进行比较时,EOF为{{1}},您就会收到段错误。