_wgetenv得到了??当值包含Unicode字符(日语)时标记值
(标题已更新,表明问题出在_wgetenv上) 当变量的路径包含日文文本时,以下程序将失败。使用VisualStudio2005编译时,同样的程序也可以正常工作_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";
#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:这很有效。我编辑了标题以表明真正的问题。你能“回答”我的问题吗,这样我就可以接受了。