gpt4 book ai didi

c - 当按下 control+d 时 fgets 不会停止读取

转载 作者:行者123 更新时间:2023-11-30 18:44:53 26 4
gpt4 key购买 nike

当您使用 getchar、fgets 或其他类似函数从 stdin 读取数据时,如果您键入一些文本,然后输入 eof(在 Linux 中为 control+d),则无法删除之前的文本。例如,如果我输入“program”,然后按 control+d 输入 eof,则无法删除之前输入的内容,即 program。

#include<string.h>
#include<stdlib.h>

int main() {

char buffer[1024] = "";
printf("> ");
if(fgets(buffer,sizeof(buffer),stdin) == NULL){
puts("eof");
}
else{
puts(buffer);
}

return 0;
}

如何避免这种情况?

最佳答案

我认为 GNU Readline 库的 readline 函数是完成这项工作的最佳选择。它使用起来非常简单,但它使用动态内存来托管字符串,因此您必须使用 free 函数来释放内存。您可以通过打开终端并输入“man readline”来查找更多信息。
代码如下所示:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <readline/readline.h>

int main() {

char *ptr = readline("> ");
if(!ptr){
puts("eof");
}
else{
puts(ptr);
}
free(ptr);

return 0;
}

为了能够在 gcc 中使用 readline,您必须传递它 -lreadline

关于c - 当按下 control+d 时 fgets 不会停止读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56509336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com