在 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
}
我正在尝试读取 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
}