_wgetenv得到了??当值包含Unicode字符(日语)时标记值

_wgetenv得到了??当值包含Unicode字符(日语)时标记值,c,visual-studio,winapi,C,Visual Studio,Winapi,(标题已更新,表明问题出在_wgetenv上) 当变量的路径包含日文文本时,以下程序将失败。使用VisualStudio2005编译时,同样的程序也可以正常工作 #include <windows.h> #include <stdio.h> #include <stdlib.h> int main (int argc, char **argv ) { wchar_t *wcharVarName= L"TEMP_PATH";

(标题已更新,表明问题出在_wgetenv上)

当变量的路径包含日文文本时,以下程序将失败。使用VisualStudio2005编译时,同样的程序也可以正常工作

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
int  main  (int argc, char  **argv ) {
        wchar_t *wcharVarName= L"TEMP_PATH";
        wchar_t *longTempPath= _wgetenv(wcharVarName);

        MessageBoxW( NULL,  longTempPath, longTempPath, MB_OK | MB_ICONERROR);

        int wlength = GetShortPathNameW(longTempPath,0,0);
        int error= GetLastError();
        if ( wlength == 0 ) {
                char buf[1000];
                sprintf ( buf, "error code %d",error);
                MessageBox( NULL, "FAIL", buf, MB_OK | MB_ICONERROR);
        }
        else {
             MessageBoxW( NULL, longTempPath, wcharVarName, MB_OK | MB_ICONERROR);
        }

}
#包括
#包括
#包括
int main(int argc,字符**argv){
wchar_t*wcharVarName=L“临时路径”;
wchar_t*longTempPath=_wgetenv(wcharVarName);
MessageBoxW(NULL,longTempPath,longTempPath,MB|U OK | MB|U ICONERROR);
int-wlength=GetShortPathNameW(longTempPath,0,0);
int error=GetLastError();
如果(wlength==0){
char-buf[1000];
sprintf(buf,“错误代码%d”,错误);
消息框(NULL,“失败”,buf,MB|U OK | MB|U ICONERROR);
}
否则{
MessageBoxW(NULL,longTempPath,wcharVarName,MB|u OK | MB|u icon);
}
}
有没有办法使上述程序与VisualStudio6一起工作

编辑: 临时路径为C:\tmp\漢字. _wgetenv显示


由于某些原因,对
\u wgetenv
的调用没有返回VS6下所需的值。
符号表示编码转换失败


一个快速的解决方法是改用。

你能展示一下
longTempPath
包含的内容吗?@David Heffernan:看起来getenv失败了?试着改用@David Heffernan:这很有效。我编辑了标题以表明真正的问题。你能“回答”我的问题吗,这样我就可以接受了。