我的程序应该允许用户编辑文件的一行。用户编辑该行,然后按Enter将其发送回去。因此,我想打印将要编辑的当前行,但是有点在stdin而不是stdout上打印它。我不知道如何解决的唯一问题是如何预填充标准输入。我已经尝试过了:
char cprefill[] = {"You may edit this line"};
char cbuffer[100];
fprintf(stdin, cprefill);
fgets(cbuffer, 100, stdin);
这似乎是最简单的解决方案,但可能太简单而无法使用。fprintf不打印任何东西到stdin。正确的方法是什么?
这是应该的样子。请注意可以移动的光标。
首先,您需要libreadline开发人员软件包。(libreadline
如果系统上尚不可用,则可能还需要)
在Debian / Ubuntu上apt install libreadline-dev
(libreadline6
如果您还需要二进制文件,则6
在您的平台上可能会有所不同)
然后,您可以向添加历史记录readline
,例如
#include <stdio.h>
#include <readline/readline.h>
#include <readline/history.h>
...
char cprefill[] = {"You may edit this line"};
add_history(cprefill);
char *buf = readline("Line: ");
printf("Edited line is %s\n", buf);
// free the line allocated by readline
free(buf);
提示用户“行:”,并且必须UP ARROW获取和编辑历史记录(即cprefill
行)。
请注意,您必须编译/链接 -lreadline
readline
打印作为参数给出的提示,然后等待用户交互,允许行编辑,并使用箭头加载历史记录中存储的行。
的char *
返回通过readline
具有随后被释放(因为函数分配有缓冲malloc()
)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句