繁体   English   中英

GetCurrentDirectory缓冲区未返回正确的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM