如何解决如何在 Windows 上找到用户的桌面地址?
我试图编写一个 C 代码来在桌面上创建一个文件。我使用 getenv() 获取地址的用户名,但它打印了一些奇怪的符号。
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
char raw[] = "C://Users/%/Desktop/xyz.txt";
char loc[strlen(raw)+strlen(getenv("USERNAME"))-1] = "";
char *env = "";
strcpy(env,getenv("USERNAME"));
for (int i = -1; i < sizeof(raw); ++i){
if (raw[i]!='%'){
strcpy(loc,raw[i]);
}
else if (raw[i]=='%'){
strcpy(loc,env);
}
}
printf(loc);
return 0;
}
这是我写的代码(请原谅变量名)。这就是我得到的:
Évs♦↨║╨↕@
我正在使用 GCC。
附言我是这门语言的新手,很抱歉,如果这是一个愚蠢的问题。
编辑 - 我忘了提到我想获得一个带有地址的变量,这样我就可以将它用于其他用途。
解决方法
如有疑问,请检查 Qt 源以了解这些内容。至少我在寻找这类东西时就是这样做的。
您可以找到他们的做法here。请注意,它是用 C++ 编写的,但操作系统的细节通常在某个时候归结为纯 C,因为这是操作系统提供的低级 API(是的,即使在 Mac 上,即使这需要一些弄清楚才能得到一切正常)。
基本上,它们使用 GUID shGetKnownFolderPath
从 Shell32.dll 调用 FOLDERID_Desktop
。
请注意,从某种意义上说,您所做的事情很好,但依赖环境变量有些危险,而且它们无法满足您可能想要获得的很多东西。
,在:
strcpy(env,getenv("USERNAME"));
指针 env
被单元化。它需要引用专门分配的内存,strcpy()
可以将字符串复制到该内存中。
除此之外,您无论如何都使解决方案过于复杂。考虑:
#include <stdio.h>
#include <windows.h>
int main()
{
char loc[MAX_PATH + 1] ;
sprintf( loc,"C:\\Users\\%s\\Desktop\\xyz.txt",getenv("USERNAME") ) ;
printf( "%s\n",loc);
return 0;
}
然而,这是一个有缺陷的假设。例如,我的桌面文件夹位于 D:\Users\%USERNAME%\Desktop
- 用户可以将他们的特殊文件夹移动到他们希望的任何位置(就像我一样)。此外,在任何情况下,不同版本的 Windows 都将其置于各种其他默认位置。例如在 XP C:\Documents and Settings\%USERNAME%
上。
您应该询问操作系统其操作系统特殊文件夹在哪里。例如使用 SHGetFolderPathA():
#include <stdio.h>
#include <windows.h>
#include <Shlobj.h>
int main()
{
char loc[MAX_PATH + 1] ;
SHGetFolderPathA( NULL,CSIDL_DESKTOP,NULL,loc) ;
printf( "%s\n",loc);
return 0;
}
,
这是特定于 Windows 的。 USERPROFILE
环境变量应该获取用户家的路径,在这种情况下桌面路径可以如下计算。
char desktop_path[MAX_PATH + 1] ;
sprintf( desktop_path,"%s\\Desktop",getenv("USERPROFILE") ) ;
char filepath[MAX_PATH + 1] ;
sprintf( filepath,"%s\\%s",desktop_path,"whateverfile.txt" ) ;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。