Это связано с тем, как символьные данные хранятся в памяти. Используя «строку», вы создаете строку типа char
, используя набор символов ASCII, тогда как я предполагаю, что макрос _TT
расширяется до L «строка», которая создает строку типа wchar_t
с использованием набора символов Unicode ( UTF-32 на Linux я верю).
функция printf
ожидает строку char
, тогда как wxLogVerbose
я предполагаю, что ожидается строка wchar_t
. Отсюда и необходимость конверсии. ASCII использовал один байт на символ (8-битные данные), но строки wchar_t
используют несколько байтов на символ, поэтому проблема заключается в кодировке символов.
Если вы не хотите вызывать эту функцию преобразования, сделайте что-то вроде следующего:
wstring file_procstatus = wxT("/PATH/TO/FILE");
wxLogVerbose(_TT("%s"),file_procstatus.c_str());