2012-05-25 208 views
6

我有一個非常愚蠢的懷疑。當我在教我的朋友C程序時,他問我「爲什麼我們要用printf,不可能是printg或者只是print」。我無法回答他。那麼在C編程中選擇printf真的有一個原因嗎?C - 爲什麼printf不只是打印?

+1

我剛開始學習C編程...我很抱歉如果這個問題很傻... – Sharan

+0

有沒有這樣的事情作爲一個愚蠢的問題。等等,是的。但是這個並不是真正的例子之一。 –

+4

這個問題含糊不清或含糊不清?它如何不合理地負責?當然有合理的答案。 (這似乎也很有趣,K-ballo是儘管已被接受的答案,但已經關閉了這個人的人之一。) – jamesdlin

回答

14

f in printf代表格式化爲,其用於格式化輸出打印。

+0

謝謝...所以如果我寫的只是打印,它會工作... – Sharan

+3

@Sharan Chandran:沒有C標準庫中的'print'功能。 –

+3

@SharanChandran非格式化版本被稱爲'puts'。 –

0

printf允許格式化,而print不允許。此外,C中不存在打印。我甚至不知道printg是什麼。

+0

我不知道'print'是什麼...... –

+0

是的,我只記得它不存在:)自從我直接編碼任何東西以來很長一段時間c –

0

如果我沒有弄錯,printf代表「打印格式化數據到標準輸出」。

+0

只是「打印格式化」 - 只要你不用'fprintf'指定''stdout'就被認爲是理所當然的了。 –

0

正如其他人指出的那樣,尾隨f指示(在scanf家庭或格式化輸入功能)的格式的輸出。

但是,我會補充一點,區分很重要,因爲調用者知道該字符串應該具有格式說明符語義。例如,不這樣做:

char* s = get_some_user_input(); 
printf(s); // WRONG. Instead use: printf("%s", s) or fputs(stdout, s) 

如果s恰好包含%字符,直接與printf打印它可能會導致它訪問不存在的爭論,導致未定義行爲(這是對一些原因安全漏洞)。如果您定義了自己的printf-like variadic函數,請牢記這個命名約定。