回覆列表
  • 1 # leang789

    不是的,printf是格式化工具,真正的輸出是其內部的fputc。所以就可以透過重寫fputc實現printf的重定向

  • 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函式就輸出到其他的輸出裝置上。你明白了嗎?

  • 中秋節和大豐收的關聯?
  • 守望先鋒卡在青銅上不去分,但打3000分的局也無問題,怎麼解決呢?