当我尝试向其传递字符串时,对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");
}

09-06 21:29