【问题标题】:error reading Environmental variables in C在 C 中读取环境变量时出错
【发布时间】:2015-06-17 17:59:02
【问题描述】:

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

【问题讨论】:

  • 您不能在文件范围内调用函数。放到main()这样的函数里,就可以了。

标签: c windows environment-variables


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    #include <stdlib.h>
    #include <malloc.h>
    #include <string.h>
    
    char* devset;
    
    int main() {
        devset = getenv("DEVSET");
        // Your code here
    }
    

    【讨论】:

      【解决方案3】:

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

      char* devset;
      

      在全局范围内和

      devset=getenv("DEVSET");
      

      来自main

      【讨论】:

        猜你喜欢
        • 2011-08-17
        • 2022-10-05
        • 2018-03-09
        • 1970-01-01
        • 2022-07-29
        • 2011-03-25
        • 1970-01-01
        • 2017-03-06
        相关资源
        最近更新 更多