C++ 为什么_vsnprintf会导致错误
我有这样一个帮助功能:C++ 为什么_vsnprintf会导致错误,c++,C++,我有这样一个帮助功能: wchar* CHelpTool::PrintfToWstrFromStr( const char *content, ... ) { va_list argp; va_start(argp, content); int nLenstr = strlen(content); char* pstrNum = (char*)MALLOC(nLenstr+50); LOG("PrintfToWstrFromStr111111111111
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;
}
当涉及到\u vsnprintf
时,程序将崩溃。日志是:
pstrNum ====================================
nLenstr ====================================68
content ====================================Gi?m phòng ??ch, t?ng %d%% sát th??ng, kéo dài 2 l??t
注意函数_vsnprintf
,它运行良好
我的功能有什么问题 strlen()
返回了错误的值,内容明显长于18个字符(68-50)。看起来您传入了一个多字节字符串,您可能需要
int nLenstr = mblen(content, MB_CUR_MAX);
这将获得正确的字符串长度
就坠机事件而言。我想猜测<代码> yvSNPrimff()/Cux>不能处理多个字节序列中间的缓冲区结束。< /P>调试器中发生了什么?嗯,请看一下<代码> pSTRNUM 。当<代码>日志/代码> GIN <代码> PSTRNUM 时,您正在卸载未初始化的数据。你以为会发生什么?由于您试图以某种方式将MBCS字符串转换为Unicode字符串,content
的LOG
可能是正确的。只是编码不对。提示:为什么不使用LOG
实现作为灵感?除非这也是你自己写的,否则很可能它并不像你的代码那么错误。。。它的长度是68,但它有一些非ascii字符。哇。。。这是一个被破坏的函数。它在\u vsnprintf
内部崩溃了吗?