1
的va_list的版本是否有下面的代碼中的va_list風采版安全地做非截斷的sprintf:預先計算的字符串長度_snprintf/_snwprintf
// format a char buffer
int size = 1 + _snprintf(NULL, 0, "%d", 132);
std::vector<char> buffer (size);
sprintf_s(&buffer[0], buffer.size(), "%d", 132);
// format a wchar_t buffer
int wsize = 1 + _snwprintf(NULL, 0, L"%d", 132);
std::vector<wchar_t> wbuffer (wsize);
swprintf_s(&wbuffer[0], wbuffer.size(), L"%d", 132);
據我可以從文檔告訴和實驗,所有的_vsnprintf函數都不返回長度的計算結果,只能截斷或生成一個錯誤。有其他選擇嗎?
這是使用微軟的編譯器和運行庫,我拿? ANSI標準vsprintf和相關函數都具有「正確」的行爲,即返回長度未經截斷的長度。 (當然,這不是那麼安慰!) – 2011-03-29 10:18:34
是的,沒錯,Microsoft編譯器。 – idij 2011-03-29 10:31:42
我不是C程序員,但我認爲ANSI C'vsprintf'函數返回實際存儲在緩衝區中的字符數,而不是沒有截斷存儲的數字。 – 2011-03-29 10:36:07