2013-07-13 99 views
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 

這是期望行爲?如果是這樣,有人可以解釋發生了什麼事嗎?

+0

「回車」是一個古怪的老式術語,意思是「走到行頭」。 –

+0

使用「./a.out | od -c」來查看真正出現的內容。 – chux

回答

8

它(\ r)是沒有換行的回車,所以光標移回到當前行的開始位置,而不移動到新行,因此覆蓋已經顯示的內容。

行爲取決於您的控制檯以及它是否將CR和LF解釋爲單獨的操作。