Problème lors de la conversion de wchar_t * en char *

J’ai besoin de lire le répertoire actuel de Windows 7, qui se trouve dans une langue différente de celle utilisée actuellement. J’ai donc pensé à utiliser GetCurrentDirectoryW () car il est compatible Unicode avec wchar_t *. Cependant, je dois utiliser une API existante, je dois donc convertir cela en char *. Pour ce faire, j’ai utilisé la fonction wcstombs (). Cependant, la conversion ne se produit pas correctement. Inclus ci-dessous est le code que j’ai utilisé:

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); 

Le répertoire actuel dans lequel je suis est C: \ 人. Lorsque la conversion est terminée, seule la partie “C: \” du chemin complet est convertie correctement en caractère *. Les autres personnages ne le sont pas, ce sont des valeurs indésirables. Quel est le problème dans cette approche que j’utilise? Comment puis-je rectifier cela?

Je vous remercie!

Le problème est qu’il n’y a pas de conversion appropriée possible. Un caractère large peut ne pas avoir un équivalent en caractères normal (ce qui explique pourquoi wchar existe en premier lieu. Vous devriez donc utiliser wprintf :

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