Hor*_*ith 0 c null environment-variables segmentation-fault
以下代码似乎以"分段错误(核心转储)"结束.我认为environ变量应该以NULL终止指针结束.我只想打印每个环境变量,所以我做错了什么?我怎么知道我已经到了最后一个环境变量?
#include <stdio.h>
#include <stdlib.h>
extern char **environ;
int main(int argc, char *argv[])
{
    int i;
    char *s = *environ;
    for(i=0; s!=NULL; i++)
    {
        printf("env%d: %s\n", i, s);
        s =  *(environ+( sizeof(char *)*i ));
    }
    return 0;
}
你的用途
*(environ+( sizeof(char *)*i ))
是完全错的.指针算术不正确.乘法sizeof(char *)是错误的.这导致在阵列上迈出大步并且跑到最后.如果你想使用指针算法,你只需写:
*(environ+i)
但是,当然,在那一点上,你已经把它简化为一种相当笨重的方式来说:
environ[i]
所以,在我看来,你应该最清楚地使用environ[i].比如这样:
int i = 0;
while(environ[i] != NULL)
{
    printf("env%d: %s\n", i, environ[i]);
    i++;
}
或者作为for循环:
for(int i = 0; environ[i] != NULL; i++)
{
    printf("env%d: %s\n", i, environ[i]);
}