Проблема в преобразовании 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 * должным образом. Других символов нет, они являются ненужными значениями. В чем проблема в этом подходе, который я использую? Как я могу исправить это?

Спасибо!

1 ответ

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

GetCurrentDirectoryW(MAX_PATH, w_currentDir);
wprintf("%s \n", w_currentDir);
Другие вопросы по тегам