gpt4 book ai didi

c - 如何从 C 中的 Linux 终端中删除一个字符

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:33:48 25 4
gpt4 key购买 nike

如何在 Linux 中删除终端上光标前的字符?过去我用过这样的东西:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define KEY_BACKSPACE 127

int main(){
printf("%s", "abc"); // add something so we can see if delete works
char * buf = malloc(3*sizeof(char));
*(buf+0)=KEY_BACKSPACE;
*(buf+1)=' ';
*(buf+2)=KEY_BACKSPACE;
write(1,buf,3);
free(buf);
}

这只是演示此技术的一个小示例。在原来的程序中,我禁用了规范模式并自己处理了每一次击键。这就是我需要删除字符的原因。

在我原来的程序中,写 backspace, space, backspace 效果很好。现在,当我在几年后运行同一个程序时,它并没有删除任何东西。什么改变了?我该怎么做才能解决这个问题?

最佳答案

正如我在 comment 中指出的那样,您需要使用退格键而不是 '\177'(或 '\x7F')向后移动。您还必须担心标准 I/O 的缓冲。通常最好不要在同一个流上混合使用标准 I/O 和文件描述符 I/O——在这个例子中是标准输出。使用其中之一,但不能同时使用。

这个有效:

#include <unistd.h>

int main(void)
{
char buff1[] = "abc";
char buff2[] = "\b \b";
write(STDOUT_FILENO, buff1, sizeof(buff1) - 1);
sleep(2);
write(STDOUT_FILENO, buff2, sizeof(buff2) - 1);
sleep(2);
write(STDOUT_FILENO, "\n", 1);
return 0;
}

首先显示(2 秒):

abc

然后(再等 2 秒):

ab

然后退出。光标先在c之后,然后在b之后。

关于c - 如何从 C 中的 Linux 终端中删除一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44488591/

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