尝试传递字符串变量时出现TRACE宏错误

时间:2011-05-18 18:15:20

标签: c++ visual-studio-2008 trace

当我尝试将字符串传递给它时,我对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";
}

为什么我收到此错误?任何想法将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

_T()宏用于字符串文字。如果您正在编译ANSI,它会扩展为原始字符串文字;如果您正在编译UNICODE,它会扩展为带有L前缀的字符串文字。您不能将它应用于函数的返回值。

如果可能,最简单的方法是将GetCmdIdStr函数更改为TCHAR而不是char

TCHAR * GetCmdIdStr( BYTE id )
{
    return _T("APP_ZDO_NLME_LEAVE_REQ");
}