无论如何SHGetFolderPath返回“C”?

我对Windows开发相当陌生(在Mac方面经验丰富),并试图使用SHGetFolderPath(因为它与Windows XP兼容)来获取当前用户的应用程序数据文件夹的path。 然而,无论我通过什么标志,我每次都会得到一个“C”的输出path。我已经尝试了两种:

CSIDL_APPDATA

CSIDL_LOCAL_APPDATA

有和没有CSIDL_FLAG_CREATE标志。 每次都有同样的结果:“C”。 我在这里做错了什么?

#include <windows.h> #include <shlobj.h> // SHGetFolderPath #include <stdio.h> #include <stdlib.h> //#pragma comment(lib, "shell32.lib") int main() { CHAR path[MAX_PATH]; HRESULT result = SHGetFolderPath(NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, SHGFP_TYPE_CURRENT, path); if (result != S_OK) printf("Error: %d\n", result); else printf("Path: %s\n" , path); printf( "String length: %d\n", strlen(path) ); return 0; } 

SHGetFolderPath文档: http : //msdn.microsoft.com/en-us/library/windows/desktop/bb762181 (v=vs.85) .aspx

您正在编译Unicode,但传递ANSI缓冲区。 您的实际代码有一个演员,你没有向我们展示。 通过wchar_t缓冲区并使用匹配的打印例程,或者调用函数的ANSI版本SHGetFolderPathA。

更改

 CHAR path[MAX_PATH]; 

 TCHAR path[MAX_PATH]; 

甚至更好

 wchar_t path[MAX_PATH]; 

并使用wprintf()wcslen()来代替printf()strlen()