错误读取C中的环境变量

时间:2015-04-12 09:55:52

标签: c windows environment-variables

我正在尝试在Windows平台上读取环境变量。 我将变量设为全局变量,因为我打算通过各种函数使用它。 这就是我试过的

#include <stdlib.h>
#include <malloc.h>
#include <string.h>

char* devset = getenv("DEVSET"); //1 for debugging, 0 for normal execution

我收到错误

C:\Users\Prateek\Documents\Script Parser\main.c|6|error: initializer element is not constant

我在main中尝试了同样的事情,它编译了,我没有得到任何错误。 但是这样我将需要将环境变量作为参数传递给所有函数。 是否有另一种方法可以使环境变量全局可访问? 任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:3)

问题不在于读取环境变量,而在于您执行此操作的位置。您的代码在静态初始化程序中读取变量,这是不允许的:只能在那里使用编译时常量。

  

然而,这样我将需要将环境变量作为参数传递给所有函数

不,您不会:将变量保留在全局范围内,并将代码移至main以解决问题:

char* devset;
int main(int argc, char *argv[]) {
    devset = getenv("DEVSET"); //1 for debugging, 0 for normal execution
    ....
    return 0;
}

答案 1 :(得分:2)

在函数外部初始化的任何全局变量都必须具有常量初始值设定项。也就是说,必须在编译时知道初始化的值。

但是在这里你试图调用getenv("DEVSET"),你不能在编译时这样做。

相反,将初始化放在main中:

#include <stdlib.h>
#include <malloc.h>
#include <string.h>

char* devset;

int main() {
    devset = getenv("DEVSET");
    // Your code here
}

答案 2 :(得分:0)

getenv是一个以char*为参数的函数。您正尝试在全局范围内调用函数。这是不可能的。只需使用

char* devset;

在全球范围内和

devset=getenv("DEVSET");

来自main