关闭程序后,我一直在寻找一种“重置” Unix终端窗口的方法,偶然发现printf("\033c" );可以很好地工作,但是我无法理解。我去了man console_codes,由于我对Unix c编程缺乏经验,所以它不是很有帮助。

有人可以解释printf("\033c" );吗?

最佳答案

在C中,以前导零开头的数字是octal数字。以8为底​​的数字。

它的作用是打印由八进制数33'c'表示的字符。

ASCII encoding中,八进制数33ESC(转义字符),它是终端控制序列的通用前缀。

有了搜索终端控制序列的知识,我们可以找到例如this VT100 control sequence reference(VT100是一个古老的“哑巴”终端,并由大多数现代终端程序模仿)。使用VT100引用,我们可以在终端设置部分找到<ESC>c,将其记录为


ESC字符也可以使用"\x1b"进行打印(仍然假定为ASCII编码)。无法在常量字符串文字中使用十进制数字,只能使用八进制和十六进制。

但是(如the commend by chux所指出),序列"\x1bc""\033c"的作用不同。这是因为0x1bc是一个有效的十六进制数字,并且编译器在解析此类序列时会贪婪。它将改为打印由值0x1bc表示的字符,我不知道它可能是什么(取决于我认为的语言环境和终端设置,可能会以Unicode字符为荣)。

10-08 08:09