Я использую vsnprintf
для строки ANSI, и она работает хорошо, возвращает -1
только в случае ошибки и возвращает счетчик размера needen, если он не помещается в буфер.
Мне нужна та же функция для широких строк, vsnwprintf
просто не существует. Я также пытался _vsnwprintf
, но он действует по-другому, он возвращает -1, даже если буфер слишком мал, хотя мне нужно знать, сколько расширить буфер, но только когда это необходимо, я не хочу делать фиктивные вызовы просто чтобы определить размер needen и только потом расширять буфер.
Если посмотреть на vsnprintf
код:
int const _Result = __stdio_common_vsprintf(
_CRT_INTERNAL_LOCAL_PRINTF_OPTIONS | _CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR,
_Buffer, _BufferCount, _Format, NULL, _ArgList);
return _Result < 0 ? -1 : _Result;
В то время как _vsnwprintf приблизительно имеет:
int const _Result = __stdio_common_vswprintf(
_CRT_INTERNAL_LOCAL_PRINTF_OPTIONS | _CRT_INTERNAL_PRINTF_LEGACY_VSPRINTF_NULL_TERMINATION,
_Buffer, _BufferCount, _Format, NULL, _ArgList);
return _Result < 0 ? -1 : _Result;
Похоже, разница только во флагах, я пытался вызвать __stdio_common_vswprintf
вручную с флагом _CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR
, и он работает именно так, как мне нужно, но также вызывает случайные сбои / зависания при выходе из приложения. Поэтому мне нужна функция vsnwprintf
, может кто-то знает, как это сделать?
P.S. Я использую Microsoft Visual Studio 2017 на Windows 7.