我正在寻找一种方法来使用缓冲区的某些变体,vsnprintf()
该缓冲区可能比输入缓冲区长,而不会向用户触发错误。
到目前为止,我发现它vsnprintf()
及其变体在缓冲区太小时会静默截断字符串,但它们不会返回字符串的实际长度,因此我无法使用更长的缓冲区再次尝试。他们返回-1。
另一方面,vsnprintf_s()
变体在遇到此错误时,调用
_VALIDATE_RETURN(("Buffer too small", 0), ERANGE, -1);
反过来最终调用_CrtDbgReportW()
,可能仅在调试中。他们甚至在调用用户提供的“无效参数处理程序”之前就这样做了
我想要的是能够通过获取我需要分配的实际大小并再次调用该函数来在没有用户交互的情况下恢复。那可能吗?