我正在使用swprintf建立一個字符串到緩衝區(使用循環等)。何時以及爲什麼sprintf失敗?
const int MaxStringLengthPerCharacter = 10 + 1;
wchar_t* pTmp = pBuffer;
for (size_t i = 0; i < nNumPlayers ; ++i)
{
const int nPlayerId = GetPlayer(i);
const int nWritten = swprintf(pTmp, MaxStringLengthPerCharacter, TEXT("%d,"), nPlayerId);
assert(nWritten >= 0);
pTmp += nWritten;
}
*pTaskPlayers = '\0';
如果在測試過程中assert從未命中,我可以確定它將永遠不會在實時代碼中命中嗎?也就是說,我是否需要檢查並處理該問題,還是可以安全地假定不存在問題?
在哪些情況下可以返回-1?文檔或多或少只是陳述「如果功能失敗」。在我讀過的一個地方,如果它不能匹配參數(即可變參數的格式化字符串),但它不會讓我擔心,它會失敗。
我也不擔心緩衝區溢出在這種情況下 - 我知道緩衝區足夠大。
由於這是C++的標籤,你有沒有考慮過使用stringstreams?更方便。 – 2010-06-01 08:55:15
代碼的性能很重要,這就是爲什麼我已經使用了一個預分配的緩衝區字符串,我只是將它複製到這個字符串中。我假設stringstreams可能每次都會執行一些內存分配? – Srekel 2010-06-21 08:42:44