我正在使用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