c++ - 为什么 strcat 到 getenv() 会更改后续的 getenv() 调用?
问题描述
我getenv()
在我的c代码中使用。
这是我使用的代码
#include<windows.h>
#include<stdio.h>
int main()
{
char *path=getenv("USERPROFILE");
strcat(path,"\\bullshit");
char *newpath=getenv("USERPROFILE");
printf("%s",newpath);
}
打印语句的结果是
C:\Users\username\bullshit
为什么getenv()
对环境变量的调用会因strcat
?
注意:我在 windows 8.1 系统上使用 minw-gcc 编译器 32 位
解决方案
您不拥有由返回的字符串getenv
,您无法修改它(例如向其附加某些内容)。
如果您需要修改它,则将其复制到您拥有并可以修改的内存中,例如数组:
char path[PATH_MAX];
strcpy(path, getenv(...));
strcat(path, ...);
如前所述,这可能导致缓冲区溢出,因此更安全的方法可能是使用strncpy
. 但是请记住,在某些情况下它不会添加字符串空终止符,因此需要显式添加。
推荐阅读
- docker - 如何在 VS2017 中清除 docker-compose 镜像名称
- algorithm - 根据位出现查找集合
- javascript - 如何在反应js中解码包含base 64 png的二维码
- omnet++ - 如何在静脉中记录 rssi (omnet++)
- python - 如何避免复数并获得浮点数?
- javascript - 检查选中的单选按钮是否返回 true 但应该为 false
- scala - Scala:克服隐式解析的泛型类型擦除
- sql - SQL 帮助 - 加入不需要所有列的小型查找表(以及其他选项)
- .htaccess - htaccess 复杂的重定向建议
- python - Python检查二维列表是否包含另一个列表的数字