我觀察到一些行爲,當使用printf通過格式字符串打印字符時,我無法解釋自己。 看起來,當字符是換行符('\ n')時,printf會忽略(包括)'%c'的所有內容,只是打印剩餘的部分。當通過'%c'打印換行符時,Printf部分忽略格式字符串
這裏是一個小例子(用戶輸入禁用優化):
#include <stdio.h>
int main(){
int c;
scanf("%d", &c); //read char by ascii id
printf("FOO%cBAR (id %i)\n", c,c);
return 0;
}
輸入45(用於碼 ' - ')的輸出 「FOO-BAR」 的結果,但在輸入13('\ n ')只是打印「BAR」。這發生在gcc 6.3.1和clang 3.9.1上,在-Og和-O3優化級別上,在linux上。
如果我沒有弄錯,這應該與輸出緩衝沒有關係。
這是行爲的目的?
這是因爲人物13是「回車」。所以它會覆蓋第一部分。換行符是字符10. –
13是'\ r'不是'\ n' –
哦,我混淆了'\ r'(13)和'\ n'(10)。所以真正的問題是爲什麼我的程序偶然發現了'\ r';我可能沒有使用文本模式來打開我的文件。 我會接受天氣風向標,如果他的評論將是一個答案。 –