在 C 中读取环境变量时出错

error reading Environmental variables in C

我正在尝试读取 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 中尝试了同样的事情,它编译并且我没有得到任何错误。 但是,通过这种方式,我将需要将环境变量作为参数传递给所有函数。 是否有另一种方法可以使环境变量全局可访问? 任何帮助表示赞赏。

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

char* devset;

在全球范围内并且

devset=getenv("DEVSET");

来自 main.

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

However this way I will be required to pass the environmental variable as an argument to all the functions

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

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

任何在函数外初始化的全局变量都必须有一个常量初始化器。也就是说,您初始化的值必须在编译时已知。

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

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

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

char* devset;

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