我正在寻找一种方法来使用 vsnprintf()
的某些变体,其缓冲区可能比输入缓冲区长,而不会向用户触发错误。
到目前为止,我发现 vsnprintf()
及其变体会在缓冲区太小时悄悄截断字符串,但它们不会返回实际长度字符串,所以我不能用更长的缓冲区再试一次。他们返回 -1。
另一方面,vsnprintf_s()
变体在遇到此错误时调用
_VALIDATE_RETURN(("Buffer too small", 0), ERANGE, -1);
这最终会调用 _CrtDbgReportW()
,可能仅在调试时调用。
他们甚至在调用用户提供的“无效参数处理程序”之前就这样做了
我想要的只是能够在没有用户交互的情况下通过获取我需要分配的实际大小并再次调用该函数来恢复。这可能吗?
最佳答案
您要查找的函数是 _vscprintf(或 _vscwprintf)。这些返回所需的字符数而不实际格式化任何内容。
关于c++ - 从 msvc2008 上失败的 vsnprintf 中恢复 graceflly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2508082/