尝试传递字符串变量时出现 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";
}
为什么我会收到此错误?任何想法将不胜感激。谢谢。
My calls to the TRACE
macro are resulting in an error when I attempt to pass a string to it like so:
TRACE(_T("PrintAppMsgTrace: %s"), _T(GetCmdIdStr( pMsg[APP_MSG_CODE_OFFSET] )));
This is the error I get in the console window output:
_CrtDbgReport: String too long or IO Error
Here is the prototype for GetCmdIdStr
:
char * GetCmdIdStr( BYTE id );
GetCmdIdStr
returns a pointer to memory containing something like "APP_ZDO_NLME_LEAVE_REQ". It essentially works like this:
char * GetCmdIdStr( BYTE id )
{
return "APP_ZDO_NLME_LEAVE_REQ";
}
Why am I getting this error? Any thoughts would be appreciated. Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
_T()
宏用于字符串文字。如果您正在编译 ANSI,它会扩展为原始字符串文字;如果您正在编译 UNICODE,它会扩展为带有L
前缀的字符串文字。您不能将其应用于函数的返回值。如果可能,最简单的方法是将
GetCmdIdStr
函数更改为返回TCHAR
而不是char
:The
_T()
macro is used on string literals. It expands to either just the original string literal, if you're compiling ANSI, or the string literal with anL
prefix if you're compiling UNICODE. You can't apply it to the return value of a function.If possible, the simplest thing to do would be to change the
GetCmdIdStr
function to returnTCHAR
instead ofchar
: