将wchar_t *转换为char *时的问题

时间:2012-11-19 04:38:14

标签: c++ visual-studio-2010 char wchar-t

我需要读取Windows 7中当前目录,该目录与当前使用的语言环境不同。所以我想使用GetCurrentDirectoryW(),因为它与unicode兼容,使用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 个答案:

答案 0 :(得分:1)

问题是没有适当的转换。宽字符可能没有常规字符等效(这就是为什么wchar存在的原因。所以你应该使用wprintf

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