2012-05-03 76 views
1

(标题更新,以指示问题是与_wgetenv)Unicode字符(日语)_wgetenv获得??标记值时,值包含

以下程序失败error 123当变量具有包含日语的文本路径。当与Visual Studio 2005

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

} 

编译相同的程序工作正常,有没有办法让上面的程序与Visual Studio 6的作品?

编辑: TEMP_PATH是C:\ tmp \汉字。该_wgetenv显示...

enter image description here

+0

你可以显示什么'longTempPath'包含? –

+0

@ David Heffernan:看起来像getenv失败了? – Jayan

+1

尝试调用['GetEnvironmentVariable'](http://msdn.microsoft.com/en-us/library/windows/desktop/ms683188(v = vs.85).aspx),而不是 –

回答

2

出于某种原因,调用_wgetenv没有返回VS6下的理想值。 ?符号表示编码转换失败。

快速解决方法是使用GetEnvironmentVariable代替。