【问题标题】:Segmentation fault when displaying environment variables in shell在 shell 中显示环境变量时出现分段错误
【发布时间】:2020-10-04 07:59:18
【问题描述】:

我正在 Ubuntu 中编写一个 shell,我正在使用以下函数将环境变量输出给用户。

    extern char **environ;


    void showEnv()
    {
         while (*environ != NULL)
              printf("%s\n",*environ++);
    }

但是,当调用该函数时,环境变量都显示正确,但显示错误“Segmentation fault (core dumped)”并终止进程。

有人可以解释我做错了什么吗?提前谢谢!

【问题讨论】:

  • 您的 environ 字符串不能以 NULL 结尾。这永远不会触发 while 循环的停止条件,会导致 sigsegv 错误。

标签: c linux shell ubuntu environment-variables


【解决方案1】:

当您执行environ++ 时,您会更改environ 指针。 循环结束后,任何尝试访问environ 的库代码都会发现它指向一个NULL 指针,仿佛环境是空的。它可能没有预料到,而且肯定不是你想要的。

改为使用临时指针变量来遍历数组:

char **p = environ;
while (*p != NULL) {
    printf("%s\n", *p++);
}

为了完整起见,我会指出 environ 数组是 guaranteed by the POSIX standard 始终以 NULL 结尾,因此您的 while 循环的停止条件将被触发。你不必担心这个。

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 2016-05-10
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 2023-03-24
    • 2019-06-01
    相关资源
    最近更新 更多