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

在C中读取环境变量时出错,c,windows,environment-variables,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 我在main中尝试了同样的方法,它编译后没有出现任何错误。 但是,通过

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

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

char* devset = getenv("DEVSET"); //1 for debugging, 0 for normal execution
我在main中尝试了同样的方法,它编译后没有出现任何错误。 但是,通过这种方式,我需要将环境变量作为参数传递给所有函数。 是否有其他方法可以使环境变量全局可访问?
感谢您的帮助。

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

char* devset;
在全球范围内和

devset=getenv("DEVSET");

from
main

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

char* devset;
在全球范围内和

devset=getenv("DEVSET");

main

中,问题不在于读取环境变量,而是在哪里执行。您的代码在静态初始值设定项中读取变量,这是不允许的:那里只能使用编译时常量

但是,通过这种方式,我需要将环境变量作为参数传递给所有函数

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

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

问题不在于读取环境变量,而是在哪里执行。您的代码在静态初始值设定项中读取变量,这是不允许的:那里只能使用编译时常量

但是,通过这种方式,我需要将环境变量作为参数传递给所有函数

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

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

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

但是在这里您试图调用
getenv(“DEVSET”)
,在编译时不能这样做

相反,将初始化放在主目录中:

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

char* devset;

int main() {
    devset = getenv("DEVSET");
    // Your code here
}
#包括
#包括
#包括
char*devset;
int main(){
devset=getenv(“devset”);
//你的代码在这里
}

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

但是在这里您试图调用
getenv(“DEVSET”)
,在编译时不能这样做

相反,将初始化放在主目录中:

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

char* devset;

int main() {
    devset = getenv("DEVSET");
    // Your code here
}
#包括
#包括
#包括
char*devset;
int main(){
devset=getenv(“devset”);
//你的代码在这里
}

不能在文件范围内调用函数。把它放在一个函数中,比如
main()
,它就会工作。你不能在文件范围内调用函数。把它放在一个函数中,比如
main()
,它就会工作。