在C中,有時我的輸出不會打印到終端,除非我打印換行符\n
。例如:爲什麼直到換行纔打印到shell?
int main()
{
printf("Hello, World");
printf("\n");
return 0;
}
世界您好將不會打印,直到下一個printf
(我知道這從設置在gdb斷點)。有人可以解釋爲什麼會發生這種情況,以及如何解決它?
謝謝!
在C中,有時我的輸出不會打印到終端,除非我打印換行符\n
。例如:爲什麼直到換行纔打印到shell?
int main()
{
printf("Hello, World");
printf("\n");
return 0;
}
世界您好將不會打印,直到下一個printf
(我知道這從設置在gdb斷點)。有人可以解釋爲什麼會發生這種情況,以及如何解決它?
謝謝!
這是出於性能原因:將數據傳遞到控制檯過於昂貴(在執行速度方面)要逐個字符地完成。這就是爲什麼輸出被緩衝直到打印換行符爲止:字符被收集到一個數組中,直到需要打印時爲止,此時整個字符串被傳遞給控制檯。您還可以強制輸出明確,像這樣:
fflush(stdout);
此外,以fflush()
你可以setvbuf(3)設置緩衝選項。
來自TI wiki,但對於理解這一點有關:http://processors.wiki.ti.com/index.php/Tips_for_using_printf#Buffering_modes – us2012
linebuffering(setvbuf(3)或stdbuf(1)) – sehe