c++ - 从 msvc2008 上失败的 vsnprintf 中恢复 graceflly

标签 c++ printf visual-c++-2008

我正在寻找一种方法来使用 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/

相关文章:

c++ - 打印字符串而不转义字符

c - printf() 没有被执行

c - extern“C”在msvc++ 9.0中无效

c++ - 警告 C4800 : 'int' : forcing value to bool 'true' or 'false' (performance warning)

visual-c++-2008 - 我的代码在 Debug模式下工作,但在 Release模式下不工作

c++ - MFC DLL 调用 AfxWinInit 并使应用程序崩溃

c++ - 计算快速排序 C++ 中的比较和移动次数

C++ - 如何在应用程序运行期间添加类对象

c - 格式参数过多(printf 函数)

c++ - 在将数组传递给 printf 等可变参数函数时,我应该将数组转换为指针吗?