![](/img/trans.png)
[英]GetCurrentDirectory does not really return the path of the executable file
[英]GetCurrentDirectory buffer doesn't return the right value
我的GetCurrentDirectory()
有问题,我不太明白为什么。 我不明白的是,它适用于XP,但不适用于XP(或至少在我的计算机上)。 有我的代码:
char dir_name[1024]; // as a global variable
int get_files() {
// ...
DWORD dwRet;
dwRet = GetCurrentDirectory(MAX_PATH, dir_name);
printf("%s\n",dir_name);
printf("%d\n",dwRet);
//...
}
此代码将返回:
printf("%s\\n",dir_name);
-> return "c"
printf("%d\\n",dwRet);
-> 42
(这是应返回的字符串的正确长度)
我不明白为什么dir_name只取值“ c”。
我认为,结果是Windows 7中的Unicode! 在此函数的每个ascii字符之后为零。 您正在通过printf
打印它。 您应该在程序中使用宽带字符功能。 像wprintf
一样。
尝试以下代码:(在Visual Studio 2008 + Windows 7中测试)
#include <stdio.h>
#include <windows.h>
#include <wchar.h>
WCHAR dir_name[1024]; // as a global variable
int get_files()
{
// ...
DWORD dwRet;
dwRet = GetCurrentDirectory(MAX_PATH, dir_name);
wprintf(L"%s\n", dir_name);
printf("%d\n", dwRet);
//...
return 0;
}
我不确定,但是在Win7下GetCurrentDirectory()
返回2字节字符?
在这种情况下,您将在返回的char数组的每第二个字节中获得0。
因此,您应该使用printf()
函数的宽字符感知版本,例如wprintf()
。
我也想知道编译器是否不会警告您有关类型的错误。
您正在使用什么编译器? 在Visual C ++ 2005中,GetCurrentDirectory是一个宏,如果定义了UNICODE宏,它将解析为GetCurrentDirectoryW,否则将解析为GetCurrentDirectoryA。 您是否偶然定义了UNICODE?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.