C中write()中的转义字符

时间:2015-08-17 03:03:58

标签: c buffer overwrite

似乎在write()中传递的转义字符不能正常工作(<至少)。

printf("test");
printf("\r1234);

返回

123

正如所料,但

printf("test");
write(1, "\r1234, 5);

返回

1234test

因此不会覆盖该行

我想知道如何擦除/覆盖C中的一行(我在linux btw上) 谢谢

2 个答案:

答案 0 :(得分:2)

尝试刷新输出流: 代码:

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

int main()
{
    printf("test");
    fflush(stdout);
    write(1, "\r1234", 5);
    return 0;
}

输出:

1234

答案 1 :(得分:2)

您的 REAL 问题是printf已缓冲且write是即时的。所以写入先行。是的它确实发送了\r,终端读取它并移动到行的前面。当程序退出时,它会刷新STDOUT缓冲区并打印printf内容。