意外的格式字符串行为

3

我刚刚在Python中遇到了一些看起来很奇怪的字符串格式化行为。结果发现是由于我不知道存在的回车符('\r')所引起的。以下是一个示例:

>>> text = 'hello\r'
>>> '(SUBJECT "%s")' % (text)
'(SUBJECT "hello\r")'
>>> print '(SUBJECT "%s")' % (text)
")UBJECT "hello

为了核实,我在几台机器上试过用C语言做同样的事情。

#include <stdio.h>

int main()
{
    char *text = "hello\r";
    printf("(SUBJECT \"%s\")\n", text);
    return 0;
}

输出:

% ./a.out
")UBJECT "hello

这是期望的行为吗?如果是,有人能解释一下发生了什么吗?

“回车”是一个古老而有趣的术语,意思是“回到行首”。 - Jim Balter
使用"./a.out | od -c"命令查看实际输出。 - chux - Reinstate Monica
1个回答

8

“\r”是回车符,但没有换行符,所以光标会回到当前行的开头,而不会移动到新的一行,因此会覆盖已经显示的内容。

具体行为取决于你使用的控制台及其是否将CR和LF视为单独的操作。


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