簡體   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