C语言 为什么getenv在这里返回NULL?

w80xi6nr  于 2023-01-08  发布在  其他
关注(0)|答案(2)|浏览(317)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv, char **envp) {
    for (int i = 0; envp[i] != NULL; i++) {
        printf("%d.%s\n", i , envp[i]);
    }

    char *aux;

    if (getenv(envp[0]) != NULL) {
        aux = getenv(envp[0]);
    } else {
        printf("NULL\n");
    }

    return 0;
}

我想打印一个环境变量的特定值,但是getenv返回null,我不知道为什么。例如,当我说getenv(“USER”)时,它工作正常

bprjcwpo

bprjcwpo1#

getenv(envp[0])的调用返回NULL,因为您传递的字符串包含键 * 及其值 *。
例如,我的系统中的envp[0]

ALLUSERSPROFILE=C:\ProgramData

ALLUSERSPROFILE
watbbzwu

watbbzwu2#

在手册页中:
getenv()函数搜索环境列表以找到环境变量名,并返回指向相应值字符串的指针。

  • "Re:不是值:/bin/bash?"*

getenv搜索变量名,并返回它的值,但是您传递给它的是envp[0],它包含变量名和值,因此是NULL
"SHELL"getenv的有效参数,而SHELL=/bin/bash不是。

相关问题