首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么strcat到getenv()更改后续的getenv()调用?

为什么strcat到getenv()更改后续的getenv()调用?
EN

Stack Overflow用户
提问于 2020-01-27 09:29:39
回答 1查看 319关注 0票数 0

我在我的c代码中使用getenv()

下面是我使用的代码

代码语言:javascript
复制
#include<windows.h>
#include<stdio.h>

int main()

{
    char *path=getenv("USERPROFILE");
    strcat(path,"\\bullshit");
    char *newpath=getenv("USERPROFILE");
    printf("%s",newpath);
}

打印语句的结果是

代码语言:javascript
复制
C:\Users\username\bullshit

为什么getenv()对环境变量的调用由于strcat而发生变化

注:我在windows 8.1系统上使用minw-gcc编译器32位。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-27 09:32:30

如果您不拥有getenv返回的字符串,您就不能修改它(例如,在它后面附加一些内容)。

如果您需要修改它,那么将其复制到您拥有的内存中,并可以修改,就像数组一样:

代码语言:javascript
复制
char path[PATH_MAX];
strcpy(path, getenv(...));
strcat(path, ...);

如前所述,这可能导致缓冲区溢出,因此使用strncpy是一种更安全的方法。但请记住,有一种情况是,它不会添加字符串null-结束符,因此需要显式地添加它。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59928245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档