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