当您使用getchar,fgets或一些类似的函数从stdin中读取内容时,如果键入一些文本然后放入eof(在Linux中为control + d),则无法删除之前的文本。例如,如果我键入“程序”,然后通过按Ctrl + d输入eof,则无法删除之前输入的内容,即“程序”。
#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 - 当按下Ctrl + D时,fgets不会停止阅读,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56509336/