当我尝试向其传递字符串时,对TRACE
宏的调用会导致错误:
TRACE(_T("PrintAppMsgTrace: %s"), _T(GetCmdIdStr( pMsg[APP_MSG_CODE_OFFSET] )));
这是我在控制台窗口输出中得到的错误:
_CrtDbgReport:字符串太长或IO错误
这是
GetCmdIdStr
的原型:char * GetCmdIdStr( BYTE id );
GetCmdIdStr
返回指向包含“ APP_ZDO_NLME_LEAVE_REQ”之类的内存的指针。本质上是这样的:char * GetCmdIdStr( BYTE id )
{
return "APP_ZDO_NLME_LEAVE_REQ";
}
为什么会出现此错误?任何想法将不胜感激。谢谢。
最佳答案
_T()
宏用于字符串文字。如果要编译ANSI,则扩展为原始字符串文字,如果要编译UNICODE,则扩展为带有L
前缀的字符串文字。您不能将其应用于函数的返回值。
如果可能,最简单的方法是更改GetCmdIdStr
函数以返回TCHAR
而不是char
:
TCHAR * GetCmdIdStr( BYTE id )
{
return _T("APP_ZDO_NLME_LEAVE_REQ");
}