[英]Why does "printf" not produce any output?
我正在C
學習編程。 你能解釋一下為什么這里沒有打印任何東西嗎?
#include <stdio.h>
int main (void)
{
char a[]="abcde";
printf ("%s", a);
}
在許多系統上printf
是緩沖的,即當您調用printf
,輸出被放置在緩沖區中而不是立即打印。 當您打印換行符\\n
時,緩沖區將被刷新(也就是打印的輸出)。
在所有系統上,盡管缺少\\n
,您的程序仍會打印,因為程序結束時緩沖區會被刷新。
通常你仍然會像這樣添加\\n
:
printf ("%s\n", a);
立即獲得輸出的另一種方法是調用fflush
來刷新緩沖區。 從手冊頁:
對於輸出流, fflush() 通過流的底層寫入函數強制寫入給定輸出或更新流的所有用戶空間緩沖數據。
來源: http : //man7.org/linux/man-pages/man3/fflush.3.html
編輯
正如@Barmar 指出並由@Alter Mann 引用的那樣,程序結束時需要刷新緩沖區。
引自@Alter Mann:
如果 main 函數返回到其原始調用者,或者如果調用 exit 函數,則在程序終止之前關閉所有打開的文件(因此刷新所有輸出流)。
奇怪的是,似乎沒有人在緩沖區被刷新的地方發布調整后的代碼......:
#include <stdio.h>
int main (void)
{
char a[]="abcde";
printf ("%s", a);
fflush(stdout);
//On some systems the line above will fail, in that case use: fflush(NULL);
}
另請注意,此代碼可能不會執行您實際想要執行的操作。
我假設你真正想做的是:
#include <stdio.h>
int main (void)
{
char a[]="abcde";
printf ("%s\n", a);
//The '\n' makes sure the next thing you print will be on the following line
}
希望我可以就此提出幾點意見,而不會讓人感到困惑。 Printf 不是被緩沖的東西,它是 stdio,所以所有類似的函數都會以相同的方式運行。 為了演示緩沖,您所要做的就是 printf 很多字符,通常超過 1024,並且 printf 將打印,因為您將超過最大緩沖區長度,它會自動刷新。 當然,所有其他觀點也是正確和有效的。
我正在學習用C
編程。 您能解釋一下為什么這里什么都沒印出來嗎?
#include <stdio.h>
int main (void)
{
char a[]="abcde";
printf ("%s", a);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.