在C语言中,字符序列"\033[H\033[J"的作用是什么?

10

我在某个随机网站上遇到了下面奇怪的字符序列。当编译并执行时,这个序列会清除终端中之前的所有内容。它是清除输出流缓冲区还是仅清除tty缓冲区?

int main()
{
   printf("\033[H\033[J");
   return 0;
}
2个回答

19

这些是 ANSI 转义代码

\033 代表 ESC (ANSI 值为 27)。

ESC [ 是一种 转义序列 ,称为 控制序列引导符(CSI)

CSI 命令以字符 ESC[ 开头,后跟零个或多个参数。

\033[H (即 ESC[H) 和 \033[J 都是 CSI 代码。

\033[H 将光标移动到屏幕左上角(即屏幕的第一行的第一列)。

\033[J 清除从光标到屏幕末尾的屏幕部分。

当结合使用时,它会导致屏幕被清除,并将光标定位在屏幕开头。

这就是在bash中使用Ctrl+Lclear命令时获得的功能。

这些 CSI 可以有参数。 如果没有提供参数,则将使用默认值。


6
如果我没记错的话,它使用了ANSI/VT100终端控制转义序列\033 - ASCII转义字符 [H - 将光标移动到起始位置 [J - 擦除屏幕从当前行到屏幕底部的内容
然而,这个命令可能不兼容每一个终端/控制台。

但它给我返回了这个 - Maifee Ul Asad
@MaifeeUlAsad 你正在使用一种不支持控制序列的损坏终端。这是什么IDE? - user149341
我正在使用 CodeBlocks - 它嗡嗡叫,伙计。 - Maifee Ul Asad
2
@MaifeeUlAsad 在Codeblocks中似乎行不通。 我之前也尝试过。 但在大多数Linux系统上可以。 - J...S
伤心的时刻 - Maifee Ul Asad
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接