为什么 strcat to getenv() 会更改后续的 getenv() 调用?
Why does strcat to getenv() changes subsequent getenv() calls?
我在我的 C 代码中使用 getenv()
。
这是我使用的代码
#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 系统
上使用 32 位 minw-gcc 编译器
您不拥有 getenv
返回的字符串,您无法修改它(例如向其附加内容)。
如果需要修改,就复制到自己的内存中,可以修改,像数组一样:
char path[PATH_MAX];
strcpy(path, getenv(...));
strcat(path, ...);
如前所述,这会导致缓冲区溢出,因此更安全的方法可能是使用 strncpy
。但是请记住,在某些情况下它不会添加字符串空终止符,因此需要显式添加。
我在我的 C 代码中使用 getenv()
。
这是我使用的代码
#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 系统
上使用 32 位 minw-gcc 编译器您不拥有 getenv
返回的字符串,您无法修改它(例如向其附加内容)。
如果需要修改,就复制到自己的内存中,可以修改,像数组一样:
char path[PATH_MAX];
strcpy(path, getenv(...));
strcat(path, ...);
如前所述,这会导致缓冲区溢出,因此更安全的方法可能是使用 strncpy
。但是请记住,在某些情况下它不会添加字符串空终止符,因此需要显式添加。