Проблема в преобразовании wchar_t * в char *

Мне нужно прочитать текущий каталог в Windows 7, который находится в другой локали, чем тот, который используется в настоящее время. Поэтому я подумал об использовании GetCurrentDirectoryW (), так как он совместим с юникодом, с wchar_t *. Однако мне нужно использовать существующий API, поэтому мне нужно преобразовать его в char *. Для этого я использовал функцию wcstombs (). Тем не менее, преобразование не происходит должным образом. Ниже приведен код, который я использовал:

    wchar_t w_currentDir[MAX_PATH + 100];
char currentDir[MAX_PATH + 100];
GetCurrentDirectoryW(MAX_PATH, w_currentDir);
wcstombs (currentDir, w_currentDir, MAX_PATH + 100);
printf("%s \n", currentDir);

Текущий каталог, в котором я нахожусь, это C: \ 特斯塔 敌人. Когда преобразование выполнено, только часть «C: \» полного пути преобразуется в char * должным образом. Других символов нет, они являются ненужными значениями. В чем проблема в этом подходе, который я использую? Как я могу исправить это?

Спасибо!

0

Решение

Проблема в том, что нет подходящего преобразования возможно. Широкий символ может не иметь регулярного эквивалента символа (вот почему wchar существует в первую очередь. Так что вы должны использовать wprintf:

GetCurrentDirectoryW(MAX_PATH, w_currentDir);
wprintf("%s \n", w_currentDir);
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector