我正在寻找一种方法,将vsnprintf()的某些变体与可能比输入缓冲区更长的缓冲区一起使用,而又不会触发用户错误。

到目前为止,我发现当缓冲区太小时,vsnprintf()及其变体会默默地截断字符串,但是它们不会返回字符串的实际长度,因此我无法使用更长的缓冲区再次尝试。他们返回-1。

另一方面,vsnprintf_s()变体在遇到此错误时,调用

_VALIDATE_RETURN(("Buffer too small", 0), ERANGE, -1);

最终会调用_CrtDbgReportW(),可能仅在调试时调用。
他们甚至在调用用户提供的“无效参数处理程序”之前执行此操作

我想要的是能够通过获取我需要分配的实际大小并再次调用该函数而无需用户干预即可恢复。那可能吗?

最佳答案

您要查找的函数是_vscprintf(或_vscwprintf)。它们返回所需的字符数,而没有实际格式化任何内容。

08-06 18:53