【发布时间】:2020-01-27 09:29:39
【问题描述】:
我在我的 c 代码中使用getenv()。
这是我使用的代码
#include<windows.h>
#include<stdio.h>
int main()
{
char *path=getenv("USERPROFILE");
strcat(path,"\\bullshit");
char *newpath=getenv("USERPROFILE");
printf("%s",newpath);
}
print语句的结果是
C:\Users\username\bullshit
为什么getenv()对环境变量的调用会因为strcat而改变?
注意:我在 windows 8.1 系统上使用 minw-gcc 编译器 32 位
【问题讨论】:
-
是的,我明白了。谢谢。
-
根据 C 标准,修改
getenv()返回的字符串 - 例如,通过使用strcat()向其附加一些内容 - 会产生未定义的行为。实际上,如果getenv()在内部使用static指针,strcat()的效果可能是修改getenv()的其他调用看到的字符串——因为它们可能都返回相同的指针。