2011-04-17 38 views
29

兩者的區別究竟是什麼?什麼時候應該使用fputs而不是fprintf?

+15

不是一個混蛋,但你檢查的說明文件【二】(HTTP://pubs.opengroup .org/onlinepubs/009695399/functions/printf.html)[functions](http://pubs.opengroup.org/onlinepubs/009695399/functions/fputs.html)?一個格式化輸出,另一個輸出未格式化的字符串到流中。你有具體的問題嗎? – 2011-04-17 02:08:39

+1

你方便的C參考手冊說什麼? – 2011-04-17 02:31:32

+1

'fputs(s,f)'在功能上等同於fprintf(f,「%s」,s)'。它們都使用現代優化編譯器編譯成相同的代碼(調用'fputs')。 – chqrlie 2017-07-23 15:59:34

回答

30

fprintf確實格式化輸出。也就是說,它讀取並解釋您提供並寫入輸出流 結果的 格式字符串。

fputs只是將您提供的字符串寫入指定的輸出 流。

fputs()不需要解析輸入字符串,找出你想要做的就是打印一個字符串。 fprintf()允許您在輸出時格式化。

+0

我可能錯了,但是如果您想打印由用戶控制的字符串,fputs會更安全。在StackOverflow上有很多文章談論這個。 – Greg0ry 2015-01-08 02:28:24

4

嚴...... ...... puts()只是寫了一個字符串,而printf()有幾種格式化工具可用於多種類型的數據。

fputs() http://www.cplusplus.com/reference/clibrary/cstdio/fputs/

fprintf() http://www.cplusplus.com/reference/clibrary/cstdio/fprintf/

文檔是很有用的!學會閱讀它,並且您將擁有一個強大的工具。

+8

'puts' /'printf'與'fputs' /'fprintf'不完全相關。 'puts'在其輸出中附加了一個'\ n'',而不像其他任何函數。 – 2011-04-17 02:13:34

11

正如其他評論者指出的那樣(並且從文檔中可以看出),最大的區別是printf允許參數格式化。

也許你問是否沒有附加參數傳遞給printf()函數是否等價?那麼,他們不是。

char * str; 
    FILE * stream; 
    ... 
    fputs(str,stream); // this is NOT the same as the following line 
    fprintf(stream,str); // this is probably wrong 

第二個可能是錯誤的,因爲字符串參數fprintf()是一個仍然是一個格式化字符串:如果它有一個「%」字符將被解釋爲格式說明符。

相同功能(但不直接/效率/尼斯)的形式是

fprintf(stream,"%s", str); 
相關問題