为了在C程序中获得环境变量,可以使用以下方法:

  • getenv()
  • extern char **environ;

但是除了上面提到的以外,是否使用char *envp[]作为main()的第三个参数来获得被视为标准一部分的环境变量?

#include <stdio.h>

int main(int argc, char *argv[], char *envp[])
{
    while(*envp)
        printf("%s\n",*envp++);
}

char *envp[]是便携式的吗?

推荐答案

函数getenv是唯一由C标准指定的函数.函数putenv和外部environ是POSIX特定的.

编辑

POSIX未指定main参数envp,但广泛支持该参数.

访问环境列表的另一种方法是声明

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

然后,可以按照与环境相同的方式处理此参数,并使用 不同之处在于它的作用域是main()的本地作用域.尽管此功能是 由于在UNIX系统上广泛实现,因此应该避免使用它, 除了范围限制,it is not specified in SUSv3.

C++相关问答推荐

在严格的C89模式下,收件箱不会在' uint64_t '上发出警告

Bison解析器转移/减少冲突

C sscanf没有捕获第二个参数

GCC引发不明确的诊断消息

拥有3x3二维数组并访问数组[1][3]等同于数组[2][0]?

在 struct 中强制转换空指针

试图从CSV文件中获取双精度值,但在C++中始终为空

进程已完成,退出代码为138 Clion

如何在C++中处理按键

错误...的多个定义(&Q)首先在这里定义&

-Wnonnull-Compare警告不是具有误导性吗?

为什么这个分配做得不好呢?

S,在 struct 中创建匿名静态缓冲区的最佳方式是什么?

int * 指向int的哪个字节?

C23标准是否向后兼容?

如何在C中处理流水线中的a、n命令?

我错误地修复了一个错误,想了解原因

If语句默认为true

根据输入/输出将 C 编译过程分为预处理、编译、汇编和链接步骤

为什么 C 字符串并不总是等同于字符数组?