Как напечатать переменные wchar_t в C - PullRequest
0 голосов
/ 24 сентября 2019

Я отлаживаю старый C-код, написанный в нашей компании.Функция выглядит примерно так -

uint32
ExecuteCommand(wchar_t *dnsName,           // IN
                                wchar_t *dnsUser,   // IN
                                PNameValue *nameValues, // OUT
                                size_t *valuesSize)     // OUT
{
   ....

Чтобы отладить это, мне нужно проверить значения dnsUser и dnsName, передаваемые в эту функцию.Я попробовал следующие варианты -

    Util_Log(L"Printing the userName %S", dnsUser);
    Util_Log(L"Printing the userName ", dnsUser);
    Util_Log(L"Printing the userName %ls", dnsUser);
    Util_Log(L"Printing the userName %lS",dnsUser);

Util_Log - это проприетарный API журналирования, используемый в нашей компании.Однако ничего из вышеперечисленного не работает, и userName печатается в искаженной форме в сгенерированных журналах.Я пытался использовать printf и wprintf, но это ничего не печатало в журналах -

  printf("Printing the userName %S",userName);
  wprintf("Printing the userName %lS  %S", userName);

Просто добавлю: Ниже приведена подпись SimCfg_Log API.

void
Util_Log(const wchar_t *fmt,  // IN
         ...)                   // IN 

Что является правильнымспособ печати аргументов wchar_t в методе?Кроме того, есть идеи, почему использование printf и wprintf ничего не печатает в логах?

Ответы [ 2 ]

2 голосов
/ 24 сентября 2019

Мои психические силы предполагают, что это все, что вам нужно сделать:

Util_Log(L"Printing the userName %s", dnsUser);

Моим психическим силам помогают два подсказки:

Первый намек - первый параметр Util_Logявляется строкой с широким символом (L"").Следовательно, спецификатор формата %s, также будет интерпретироваться как строка с широким символом.

Второй намек - это тот единственный спецификатор формата, который вы не упомянули, поскольку уже пробовали.;)

1 голос
/ 24 сентября 2019

Вы не можете использовать параметры форматирования вашей внутренней функции и полагаться на swprintf :

#define SIZE 256
wchar_t buffer[SIZE];
swprintf(buffer, SIZE, L"Printing the userName %s",userName);

Util_Log(buffer);
...