wsprintf
старый, очень старый.Он не документирует *
в точности, поэтому не передавайте эту строку формата в wsprintf
.Ваш тест технически не указан.
Обратите внимание, что wsprintf
не будет записывать более 1023 символов в buff
с последующим нулевым символом и в UCS-2, а не в UTF-16.Конструкция этой функции заключается в том, что вы передаете ей буфер стека фиксированного размера, равный 1024, и не беспокоитесь о переполнении буфера, поскольку она усекается для вас.
Насколько я могу судить по ее намерению, она больше предназначена для созданияотладочные сообщения для передачи на MessageBox
, а не для фактического использования приложения.Это очень сокращенная форма snprintf
с фиксированной n
, которая реализована независимо от других стандартных библиотек.
Хорошо, поэтому вы хотите, чтобы swprintf
всегда заканчивался нулем.Попробуйте это:
int swprintf2(wchar_t *ws, size_t len, const wchar_t* format, ...)
{
va_arg arg;
va_start(arg, format);
ws[len - 1] = 0;
return vswprintf(ws, len - 1, format, arg);
}