2012-05-16 49 views
4

我迷迷糊糊翻過:什麼是sprintf(「%!ld」)?

sprintf(buffer, "%!ld ", date); 

我明白LD長整數,但什麼是!的目的是什麼?我找不到任何這方面的參考,和輸出似乎類似於經典%ld對我來說

編輯:顯然在我的系統上它附加到變量字符串+to_date('01/01/1904','DD/MM/YYYY')) ...這確實用於查詢數據庫它將日期轉換爲實際的oracle日期(我認爲)。 現在我試着看看這是否是一個特殊的sprintf,它來自哪裏

+1

你在哪裏找到那個代碼? – Mat

+0

你試過了嗎?它有什麼作用?爲什麼你不能假設它只是一段錯誤的代碼? –

+2

這個工作的是什麼系統? gcc只會抱怨。 – mkb

回答

2

這是一個無效的格式字符串。

我認爲大多數printf實現在獲取無效格式字符串時,將%視爲文字而不是特殊字符。所以它會打印%!ld

如果它對你來說就像%ld一樣,那麼,正如一些評論所說,這可能是你的平臺的非標準擴展。

+0

或者,也許他的平臺上(S)的printf的實現忽略無效的格式改性劑,即它解釋'%!ld'爲'%ld'這可以解釋爲什麼它適合他,但沒有記錄任何地方。 – sepp2k

+0

@ sepp2k,確實這似乎是最有可能的情況。 – ugoren

+0

你應該看看吉姆皮克的答案!對於SM-VC,這似乎是有道理的...... – alk

3

據我所知,這不會是有效的printf - 或將只是被忽略。我所知道的唯一的情況,在那裏你使用類似%!是在Windows的FormatMessage,看到http://msdn.microsoft.com/en-us/library/aa908810.aspx

+0

在這種情況下,'%!ld!'有道理,而不是'%!ld'。但也許這是混淆的根源。 – ugoren

0

我認爲這將打印%!ld的,因爲這不是在C.有效的格式說明

相關問題