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