2015-04-12 24 views
1

我正试图在Windows平台上读取环境变量。 因为我打算通过各种函数使用它,所以我制作了全局变量。 这是我试过错误读取C中的环境变量

#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 

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

+6

你不能说在文件范围的功能。把它放在'main()'这样的函数中,它就可以工作。 –

回答

3

问题不在于读取环境变量,而是您做这件事的地方。你的代码在静态初始化器中读取变量,这是不允许的:只有编译时常量可以在那里使用。

不过,我将需要这样的环境变量作为参数传递给所有的功能

不,你不会的:保持变量在全球范围内,移动你的代码为main来解决这个问题:

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

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

char* devset; 
在全球范围内

devset=getenv("DEVSET"); 

main

2

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

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

相反,把初始化在主:

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

char* devset; 

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