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

min*_*ing 0 c stdin fgets segmentation-fault eof

所以我用fgets读了一行

line = fgets(l, BUFSIZ, stdin);
Run Code Online (Sandbox Code Playgroud)

我从我的理解控制+ d是EOF,所以我尝试了

if(line[0] == EOF)
     continue;
Run Code Online (Sandbox Code Playgroud)

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

Arj*_*ran 5

由于机器生成EOFCtrl + D,你应该检查fgets()NULL,因为fgets()有义务回报NULL在文件末尾.

line = fgets(l, BUFFSIZ, stdin)
if (line == NULL)
    continue;
Run Code Online (Sandbox Code Playgroud)

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