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

How do you detect ctrl+D in C?

所以我使用 fgets 读取了一行

line = fgets(l, BUFSIZ, stdin);

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

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

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

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

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

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

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

你遇到了段错误,因为当你试图将它与 EOF 进行比较时,lineNULL