vsnprintf()
ユーザーにエラーをトリガーすることなく、入力バッファーよりも長くなる可能性のあるバッファーを使用して、いくつかのバリアントを使用する方法を探しています。
これまでのところvsnprintf()
、バッファーが小さすぎると文字列が静かに切り捨てられることがわかりましたが、文字列の実際の長さは返されないため、より長いバッファーで再試行することはできません。-1 を返します。
一方、vsnprintf_s()
バリアントは、このエラーに直面すると、
_VALIDATE_RETURN(("Buffer too small", 0), ERANGE, -1);
_CrtDbgReportW()
おそらくデバッグでのみ、最終的に を呼び出します。ユーザーが提供した「無効なパラメーターハンドラー」を呼び出す前であっても、これを行います。
私が望むのは、割り当てる必要がある実際のサイズを取得して関数を再度呼び出すことにより、ユーザーの操作なしで回復できることだけです。それは可能ですか?