Windows可以使用环境吗?

时间:2019-01-25 18:11:37

标签: c windows environment-variables

主要Windows C编译器中的environ变量(自POSIX起)可用(至少用于读取)吗?

我知道execve在Windows上可用:https://en.wikipedia.org/wiki/Exec_(system_call)

但是我不确定environ是否也可用。

3 个答案:

答案 0 :(得分:2)

编辑:我错了;看起来MSVC运行时库确实支持environ(尽管已弃用)。如果有人对替代方法感兴趣,我将在下面保留以前的回答。


不是我所知道的,但是,如果要访问Windows上的环境变量,则可以使用以下选项:

  1. 用以下签名声明mainwmain

    int (w)main(int argc, char/wchar_t *argv[], char/wchar_t *envp[])
    

    在C标准中将其定义为指向环境块的指针(如果适用):

      

    §J.5.1

         

    在托管环境中,主函数接收第三个参数char * envp [],   指向一个以空值终止的char指针数组,每个指针都指向一个字符串   提供有关此程序执行环境的信息   (5.1.2.2.1)。

  2. 使用Windows API函数GetEnvironmentVariable(A|W)获取单个环境变量,或使用GetEnvironmentStrings获取整个环境数组。

  3. 标准C函数getenv

答案 1 :(得分:2)

以下程序将打印环境变量。

#include <stdio.h>

int main(int argc, char *argv[], char *env[]){
    int e = 0;
    while (env[e] != NULL) {
        printf("%s\n", env[e++]);
    }
}

答案 2 :(得分:2)

环境应该可用,但已弃用,您应该使用更安全的方法。

execXX()调用可用,但fork()不可用,因此有效地使exec函数无效。

您可以使用CreateProcessA来达到类似的效果,并能够干净地设置环境和管道。

只需承认@eryksun的问题:在使用任何Microsoft“ A”文件(和其他O / S)API之前,您确实需要考虑所使用的字符集。如果您可以使用16位unicode来完成所有代码,这是最简单的,因为这是NT,Windows 7,Windows 10的基础类型。在unix和mac上,您可以假设utf-8是8位字符集,选择,但对于Windows尚未发生,当然还有“向后兼容性”。如果您正在使用任何的“类unix” M / S API,则应该已经做出了相同的设计决策,因此应该已经有了答案。