第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

除非換行符在格式字符串中,為什么printf在調(diào)用后不會刷新?

除非換行符在格式字符串中,為什么printf在調(diào)用后不會刷新?

12345678_0001 2019-05-23 13:11:20
printf除非換行符在格式字符串中,為什么在調(diào)用后不刷新?這是POSIX的行為嗎?我怎么可能printf每次都立即沖洗?
查看完整描述

3 回答

?
胡說叔叔

TA貢獻1804條經(jīng)驗 獲得超8個贊

stdout流緩沖,所以將只顯示什么是在緩沖區(qū)到達后換行(或者當它告知)。您可以選擇立即打印:

使用fprintf以下方式打印到stderr :

fprintf(stderr, "I will be printed immediately");

無論何時需要使用,都要刷新標準輸出fflush

printf("Buffered, will be flushed");fflush(stdout); // Will now print everything in the stdout buffer

編輯:從下面的Andy Ross的評論中,您還可以使用setbuf以下命令禁用stdout上的緩沖:

setbuf(stdout, NULL);


查看完整回答
反對 回復 2019-05-23
?
qq_遁去的一_1

TA貢獻1725條經(jīng)驗 獲得超8個贊

不,它不是POSIX行為,它是ISO行為(嗯,它 POSIX行為,但只在它們符合ISO的范圍內(nèi))。

如果可以檢測到標準輸出是指參考交互式設備,則標準輸出是行緩沖的,否則它是完全緩沖的。所以有些情況下printf不會刷新,即使它有一個換行符,例如:

myprog >myfile.txt

這對效率很有意義,因為如果您與用戶進行交互,他們可能希望看到每一行。如果您將輸出發(fā)送到文件,則很可能是另一端沒有用戶(盡管不是不可能,但他們可能正在拖尾文件)。現(xiàn)在你可以爭辯說用戶想要看到每個角色但是有兩個問題。

首先是它效率不高。第二個原因是ANSI C的原始授權主要是對現(xiàn)有行為進行編碼,而不是發(fā)明行為,而這些設計決策是在ANSI開始流程之前做出的。在改變標準中的現(xiàn)有規(guī)則時,即便是ISO現(xiàn)在也非常謹慎。

至于如何處理,如果fflush (stdout)你想要立即看到每個輸出調(diào)用后,這將解決問題。

或者,您可以setvbuf在操作之前使用stdout,將其設置為無緩沖,您不必擔心將所有這些fflush行添加到您的代碼中:

setvbuf (stdout, NULL, _IONBF, BUFSIZ);

只要記住這可能會影響性能相當多,如果你正在發(fā)送輸出到文件。另請注意,對此的支持是實現(xiàn)定義的,不受標準保證。

ISO C99部分7.19.3/3是相關位:

當流未緩沖時,字符應盡快從源或目的地出現(xiàn)。否則,可以將字符作為塊累積并發(fā)送到主機環(huán)境或從主機環(huán)境發(fā)送。

當流被完全緩沖時,當填充緩沖區(qū)時,字符將作為塊傳輸?shù)街鳈C環(huán)境或從主機環(huán)境傳輸。

當流被線緩沖時,當遇到換行符時,字符將作為塊傳輸?shù)街鳈C環(huán)境或從主機環(huán)境傳輸。

此外,當填充緩沖區(qū),在無緩沖流上請求輸入時,或者在需要從主機環(huán)境傳輸字符的行緩沖流上請求輸入時,字符旨在作為塊傳輸?shù)街鳈C環(huán)境。 。

對這些特性的支持是實現(xiàn)定義的,并且可能通過setbufsetvbuf函數(shù)受到影響。


查看完整回答
反對 回復 2019-05-23
?
天涯盡頭無女友

TA貢獻1831條經(jīng)驗 獲得超9個贊

這可能是因為效率,因為如果你有多個程序?qū)懭雴蝹€TTY,這樣你就不會在一行上交換字符。因此,如果程序A和B正在輸出,您通常會得到:

program A output
program B output
program B output
program A output
program B output

這很糟糕,但它比

proprogrgraam m AB  ououtputputt
prproogrgram amB A  ououtputtput
program B output

請注意,它甚至不能保證在換行符上刷新,因此如果刷新對您很重要,則應明確刷新。


查看完整回答
反對 回復 2019-05-23
  • 3 回答
  • 0 關注
  • 677 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號