也许演示会有所帮助:
char *getenv(const char *var){
int i=0, len=strlen(var);
if (!environ||!*var||strchr(var,'='))
return NULL;
while ( environ[i] && (environ[i][len] != '=' || strncmp(var,environ[i],len)) )
i++;
return (environ[i])? environ[i]+len+1 : NULL;
}
每次调用都会得到一个指向全局外部二维数组的适当指针environ
,这就是程序不应该修改它的原因,因为它实际上会修改环境变量;但是随后对 getenv 的调用可能会在不同的位置获得值(如果 setenv 或 putenv 已更改它)
请注意,您正在获得一个指向字符串中间的指针。想想如果你改变它会发生什么。然后在任何给定点 **environ 可能会更改,以便地址指向其他变量(或垃圾)......如果您需要长期使用该字符串,您应该复制它以确保安全(尤其是在线程环境中)
它的意思是你可以mycharptr=getenv("myvar");
随心所欲地做,这是安全的,但不要这样做mycharptr=getenv("myvar");mycharptr[0]='\0'; ... mycharptr=getenv("myvar");
……否则你可能会得到意想不到的结果。