gpt4 book ai didi

c - environ 似乎没有以 NULL 结尾

转载 作者:太空宇宙 更新时间:2023-11-04 05:03:28 25 4
gpt4 key购买 nike

以下代码似乎以“段错误(核心已转储)”结尾。我认为环境变量应该以 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]);
}

关于c - environ 似乎没有以 NULL 结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26344457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com