![](/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.