-
1 # leang789
-
2 # C語言答疑課堂
printf函式是C語言的標準函式庫中的一個輸出函式,它的功能就是表面上把資料輸出到螢幕中。這裡要注意一下,我提到了一個詞是“表面”!看似好像C語言的printf函式把資料輸出到螢幕上顯示出來,其實printf函式是把資料輸出給一個“流”,這個流叫做“stdout”,而不是真的直接輸出到螢幕。是不是有點意思?下面看我詳細講來!
一、計算機的輸出裝置計算機有很多的輸出裝置,我們最常見的就是顯示器,也就是常說的“螢幕”。但是計算機的輸出裝置可遠遠不止顯示器這個螢幕。還有一些輸出裝置,比如:
印表機。你辦公的電腦和你學習的電腦一般都會連線著一臺印表機吧,此時印表機就算是一個輸出裝置;
音箱。電腦內建的音箱畢竟效能有限,不足以播出優美的歌聲。有的音樂發燒友會使用電腦外帶一組音箱,透過更專業的音箱來享受較好的音樂效果,這裡的音箱也是輸出裝置。
隨身碟、硬碟等。你常用的隨身碟等接在電腦的USB介面上,只要向隨身碟複製資料,此時隨身碟也是輸出裝置。
一臺計算機可以外接這麼多的輸出裝置,但是C程式程式碼中的printf函式可不知道有這麼多的外接裝置,它是怎麼向外輸出資料的呢?
二、stdout流既然計算機外接了這麼多的輸出裝置,C語言的printf函式顯然不可能直接跟顯示器、跟印表機、跟音箱打交道,聰明的程式設計者想出了一個方法:把所有的這些外接的輸出裝置全部用一個叫做“stdout流”的東西統一表示。說白了,就是在C程式和具體的輸出裝置之間多了一個stdout流。
對於C程式而言,C程式的printf函式只把資料輸出到stdout流,再由作業系統把資料從這個stdout流中拿出給到具體的輸出裝置。比如如下這段C程式程式碼:
如果直接編譯執行,C程式程式碼會將字串"1234"輸出到stdout流,再由作業系統將字串“1234”送到顯示器上顯示。
如果我用一個重定向運算子,就像這樣:
那麼C程式程式碼還是會將字串“1234”輸出到stdout流,此時作業系統會將字串“1234”送到一個文字檔案“1.txt”中了。當你開啟這個文字檔案,你會發現其中的內容就是“1234”。
所以,C語言中的printf函式並不是將輸出直接輸出到顯示器螢幕,而是輸出到一個叫做stdout的流中,這個stdout流如果代表了顯示器,那麼printf函式就輸出到顯示器螢幕;如果代表了其他的輸出裝置,printf函式就輸出到其他的輸出裝置上。你明白了嗎?
回覆列表
不是的,printf是格式化工具,真正的輸出是其內部的fputc。所以就可以透過重寫fputc實現printf的重定向