主要Windows C编译器中的environ
变量(自POSIX起)可用(至少用于读取)吗?
我知道execve
在Windows上可用:https://en.wikipedia.org/wiki/Exec_(system_call)
但是我不确定environ
是否也可用。
答案 0 :(得分:2)
编辑:我错了;看起来MSVC运行时库确实支持environ
(尽管已弃用)。如果有人对替代方法感兴趣,我将在下面保留以前的回答。
不是我所知道的,但是,如果要访问Windows上的环境变量,则可以使用以下选项:
用以下签名声明main
或wmain
:
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)。
使用Windows API函数GetEnvironmentVariable(A|W)
获取单个环境变量,或使用GetEnvironmentStrings
获取整个环境数组。
标准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,则应该已经做出了相同的设计决策,因此应该已经有了答案。