一个write和printf混用的例子
生活随笔
收集整理的這篇文章主要介紹了
一个write和printf混用的例子
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我們知道,C語(yǔ)言中,write和printf都可以完成向屏幕輸出的任務(wù)。
但是write是不帶緩沖的輸出,printf是帶緩沖的輸出。當(dāng)它們二者混用時(shí),就會(huì)出現(xiàn)一些意料之外的問(wèn)題。
請(qǐng)看下面的代碼
按照程序的執(zhí)行流程,輸出的結(jié)果應(yīng)該是"12345[換行]6"。
但是實(shí)際上屏幕的輸出結(jié)果是"24135[換行]6"
原因是這樣的,write函數(shù)不帶緩沖區(qū),因此每當(dāng)程序執(zhí)行到write函數(shù)時(shí),就會(huì)立即向屏幕輸出。而printf是帶緩沖區(qū)的,只有當(dāng)緩沖塊滿(mǎn)或是遇到換行符,才會(huì)將緩沖區(qū)的內(nèi)容一并向屏幕輸出。
為了避免這種情況,不應(yīng)將兩種輸出函數(shù)混用,或者是對(duì)于printf出的不以換行符結(jié)尾的字符串,用一個(gè)fflush函數(shù)強(qiáng)制清空緩沖區(qū),輸出到屏幕上,就得到下面的代碼。
總結(jié)
以上是生活随笔為你收集整理的一个write和printf混用的例子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 程序人生 Hello‘s P2P
- 下一篇: 通俗理解checked Exceptio