当我尝试将字符串传递给它时,我对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";
}
为什么我收到此错误?任何想法将不胜感激。感谢。
答案 0 :(得分:1)
_T()
宏用于字符串文字。如果您正在编译ANSI,它会扩展为原始字符串文字;如果您正在编译UNICODE,它会扩展为带有L
前缀的字符串文字。您不能将它应用于函数的返回值。
如果可能,最简单的方法是将GetCmdIdStr
函数更改为TCHAR
而不是char
:
TCHAR * GetCmdIdStr( BYTE id )
{
return _T("APP_ZDO_NLME_LEAVE_REQ");
}