arrays - 如何在 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。
PS我是该语言的新手,如果这是一个愚蠢的问题,我很抱歉。
编辑 - 我忘了提到我想获得一个带有地址的变量,所以我可以将它用于其他事情。
解决方案
如有疑问,请检查 Qt 源代码以获取此类内容。至少这就是我在寻找这类东西时所做的。
你可以在这里找到他们的做法。请注意,它是用 C++ 编写的,但操作系统细节通常在某些时候归结为纯 C,因为这是操作系统提供的低级 API(是的,即使在 Mac 上,即使这需要一些弄清楚才能得到一切正常)。
基本上,他们shGetKnownFolderPath
使用 GUID 从 Shell32.dll调用FOLDERID_Desktop
。
请注意,从某种意义上说,您正在做的事情很好,但是依赖环境变量有些危险,而且它们不能满足您可能想要获得的很多东西。
推荐阅读
- ansible - ansible with_sequence 结果消息隐藏
- android - 带有 Pac URI 的 VPN 服务 setHttpProxy
- java - 警告:javax.persistence.spi::没有找到有效的提供者
- selenium - 如何在 Selenium 中关闭打印屏幕弹出窗口
- homebrew - 运行命令“brew install thrift@0.12”时无法安装 thrift 编译器
- python - 如何使用 Libclang 检查 C++ 函数是否是异步的?
- classnotfoundexception - 引起:java.lang.ClassNotFoundException:org.springframework.core.io.buffer.DataBufferLimitException
- sql - 为什么递归 SQL“范围”查询中没有重复项?
- python-3.x - 如何获取表格的所有行,而不仅仅是第一行?
- php - 同一张表中的 Laravel 模型关系