我有一个奇怪的问题_snprintf功能, 代码:C++ _snprintf返回-1
char string1[] = "string";
char string2[] = "Description";
char string3[] = "BIOS Date: 05/12/15 15:30:43 Ver: 04.06.05";
char *buffer = new char[64];
int resx = _snprintf(buffer, 64, "[%03u] %s %s = (%s)", 16, string1, string2, string3);
对于我来说,返回-1,但是为什么呢? 在文档中说-1发生编码错误时返回,但我没有编码任何东西,没有unicode格式? 我只需要长度值扩大缓冲区
我也尝试过它会导致断言_snprintf_s,但必须返回一个needen长度
我也不能采取足够大的缓冲区,因为字符串1,字符串,STRING3能在实际情况任意字符串
谢谢
编辑: 最后,在Visual Studio中为我工作的解决方案2013年和2015年 EDIT2: 的va_list的固定用法(谢谢MCH)
string format(const char *fmt, ...)
{
string result;
va_list vl1, vl2;
va_start(vl1, fmt);
va_copy(vl2, vl1);
int needen_size = _vsnprintf(nullptr, 0, fmt, vl1);
if (needen_size > 0)
{
if (char *buffer = new char[needen_size + 1]) {
_vsnprintf(buffer, needen_size, fmt, vl2);
buffer[needen_size] = '\0';
result.assign(buffer);
delete[] buffer;
}
}
va_end(vl1);
va_end(vl2);
return result;
}
”不是个t产生的字符串长度> 64个字符? –
是的,但我需要知道要分配多少以适应所有内容 在写入的文档中,结果值必须是needen长度,但它会返回-1,如发生错误 – Annett
您在什么平台上使用'_snprintf'和'snprintf '(注意下划线)? –