【问题标题】:Environment variable $QUERY_STRING is not being included with *envp[]环境变量 $QUERY_STRING 未包含在 *envp[] 中
【发布时间】:2015-04-28 18:15:02
【问题描述】:

我已经使用以下命令设置了一个环境变量:

QUERY_STRING='This is my query string'

这是我的程序:

#include <stdio.h>
#include <stdlib.h>

void main (int argc, char *argv[])
{
      printf("%s\n", getenv("QUERY_STRING"));
}

这就是我运行程序时得到的结果:

mantis@toboggan /testing/cgi_download/temp $ echo $QUERY_STRING; ./a.out
This is my query string.
Segmentation fault
mantis@toboggan /testing/cgi_download/temp $

看起来好像没有设置环境变量,所以getenv() 返回一个NULL

我真的不知道为什么这不起作用。 $PATH 等其他变量可用。如何设置此环境变量以便我的程序可以使用它?

uname -a:

Linux toboggan 3.18.7+ #755 PREEMPT Thu Feb 12 17:14:31 GMT 2015 armv6l GNU/Linux

【问题讨论】:

  • 注意main 应该返回int,而不是void
  • @ace:当您减少代码以仅包含错误时不会!但我明白你来自哪里。 ;)
  • 错误。 C 标准规定main 应该返回int。见stackoverflow.com/a/207992/3488231
  • @ace:如果我将它从 void main 更改为 int main,那么我的程序将需要另一行代码,因此不会简化为只显示错误。
  • 你有export 编辑过吗?要使子进程可以使用环境变量,您必须将其导出。

标签: c linux raspberry-pi environment-variables getenv


【解决方案1】:

这个shell命令:

QUERY_STRING='This is my query string'

创建一个shell变量,而不是一个环境变量。 Shell 变量是 shell 进程的本地变量,不会传递给像 a.out 这样的子进程。要使其成为环境变量,您需要将其导出:

export QUERY_STRING

【讨论】:

  • 顺便说一句,我无法重现您的问题...当我不导出变量时它SIGSEGV 但根本没有打印。如果我导出变量,它工作正常。但我从来没有同时得到这两个答案。
【解决方案2】:

您需要导出变量,以便它传播到子进程中:

 export QUERY_STRING='This is my query string'

【讨论】:

    猜你喜欢
    • 2019-05-15
    • 2018-11-12
    • 2014-02-01
    • 2014-02-15
    • 2020-05-08
    • 2013-03-03
    • 2023-03-07
    • 2015-08-04
    • 1970-01-01
    相关资源
    最近更新 更多