Ошибка макроса TRACE при попытке передать строковую переменную - PullRequest
0 голосов
/ 18 мая 2011

Мои вызовы макроса TRACE приводят к ошибке, когда я пытаюсь передать ей строку следующим образом:

TRACE(_T("PrintAppMsgTrace: %s"), _T(GetCmdIdStr( pMsg[APP_MSG_CODE_OFFSET] )));

Это ошибка, которую я получаю в выводе окна консоли:

_CrtDbgReport: слишком длинная строка или ошибка ввода-вывода

Вот прототип GetCmdIdStr:

char * GetCmdIdStr( BYTE id );

GetCmdIdStr возвращает указательпамять, содержащая что-то вроде "APP_ZDO_NLME_LEAVE_REQ".По сути, это работает так:

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

Почему я получаю эту ошибку?Любые мысли будут оценены.Спасибо.

1 Ответ

1 голос
/ 18 мая 2011

Макрос _T() используется для строковых литералов.Он расширяется либо до исходного строкового литерала, если вы компилируете ANSI, либо до строкового литерала с префиксом L, если вы компилируете UNICODE.Вы не можете применить его к возвращаемому значению функции.

Если возможно, самое простое, что можно сделать, это изменить функцию GetCmdIdStr, чтобы она возвращала TCHAR вместо char:

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