У меня есть функция справки, как это:почему _vsnprintf вызывает ошибку
wchar* CHelpTool::PrintfToWstrFromStr(const char *content, ...)
{
va_list argp;
va_start(argp, content);
int nLenstr = strlen(content);
char* pstrNum = (char*)MALLOC(nLenstr+50);
LOG("PrintfToWstrFromStr11111111111111111111111111111111111111111111");
LOG("PrintfToWstrFromStr pstrNum ====================================%s", pstrNum);
LOG("PrintfToWstrFromStr nLenstr ====================================%d", nLenstr);
LOG("PrintfToWstrFromStr content ====================================%s", content);
_vsnprintf(pstrNum, nLenstr+50-1, content, argp);
LOG("PrintfToWstrFromStr2222222222222222222222222222222222222222222222");
AECHAR* wpstrNum = CHelpTool::StrToWstr(pstrNum);
FREEIF(pstrNum);
va_end(argp);
return wpstrNum;
}
Когда дело доходит до _vsnprintf
, программа рушится.
и бревно:
pstrNum ====================================
nLenstr ====================================68
content ====================================Gi?m phòng ??ch, t?ng %d%% sát th??ng, kéo dài 2 l??t
Это идет хорошо записке function _vsnprintf
.
В чем проблема с моей функцией?
Что происходит в вашем отладчике? – norlesh
Хорошо, убедитесь сами, что такое 'pstrNum'. –
Когда 'LOG'ging' pstrNum', вы сбрасываете неинициализированные данные. Чего вы ожидали? И поскольку вы каким-то образом пытаетесь преобразовать строку MBCS в строку Unicode, 'LOG'' content' может быть правильным. Просто не правильная кодировка. ** Подсказка: ** Почему бы не использовать реализацию «LOG» в качестве вдохновения? Если это не было написано самим собой, скорее всего, это не так плохо, как ваш код. – IInspectable