有沒有人知道爲什麼C標準庫中沒有snwprintf
函數?爲什麼C沒有snwprintf函數?
我知道swprintf
,但是它不具有相同的snprintf
版本的真實的wchar_t
版本的語義。據我所知,有實現使用[v]swprintf
的snwprintf
功能沒有簡單的方法:
不像snprintf
,swprintf
不返回所需的緩衝區大小;如果提供的緩衝區不足,它只會返回-1。這與編碼錯誤導致的失敗無法區分,所以我無法繼續使用逐漸增大的緩衝區重試,希望它最終能夠成功。
我想我可以將緩衝區的最後一個元素設置爲非NUL,調用swprintf
,並假定如果該元素之後是NUL,則會發生截斷。但是,這是保證工作?如果swprintf
失敗,則標準不指定緩衝區應處於什麼狀態。 (相反,snprintf
描述了哪些字符被寫入,哪些被丟棄。)
我認爲你是對的,當'swprintf'失敗時你不能假設任何有關緩衝區內容的東西。你能用'errno'嗎?我知道它可以在POSIX上工作,但C本身可能不需要'EILSEQ'來編碼錯誤...? – 2010-09-12 21:13:36
@R:謝謝。 'errno'是一個有趣的想法。我想,如果我想要一個可移植的解決方案,我可能不得不修改FreeBSD的一個實際的'vswprintf'實現。 =( – jamesdlin 2010-09-13 18:14:02
請記住,重新實現printf-family函數可能是一個糟糕的主意,因爲你不能保證你複製了所有特定於語言環境的功能 – 2010-09-13 18:20:13