0
我的电话给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";
}
为什么我得到这个错误?任何想法将不胜感激。谢谢。
我完全不明白为什么,但似乎这样的伎俩。谢谢。 – 2011-05-18 19:27:38
原因是_T()宏的L前缀使编译器为每个字符分配2个字节,而不是每个字符1个字节。它可以在编译时在文字上做到这一点,但它不能在运行时在变量上执行,就像你从函数返回一样。因此,根据编译器设置,您将每字符1个字节的字符串传递给TRACE函数,期望每字符2个字节的字符串。 – Chadwick 2011-05-18 20:01:33