Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ MAC OS有类似于wenviron的东西吗?_C++_Macos - Fatal编程技术网

C++ MAC OS有类似于wenviron的东西吗?

C++ MAC OS有类似于wenviron的东西吗?,c++,macos,C++,Macos,我正在尝试做的是创建一个包含系统中存在的所有环境变量的表。我的解决方案适用于windows和char环境变量(使用environ),但不适用于Mac 这就是我目前的解决方案: template<> char** GetEnviron(void) { return environ; } template<> wchar_t** GetEnviron(void) { return _wenviron; } T* pEnvVarPair = *GetEnvi

我正在尝试做的是创建一个包含系统中存在的所有环境变量的表。我的解决方案适用于windows和char环境变量(使用environ),但不适用于Mac

这就是我目前的解决方案:

template<>
char** GetEnviron(void)
{
    return environ;
}

template<>
wchar_t** GetEnviron(void)
{
    return _wenviron;
}

T* pEnvVarPair = *GetEnviron<T*>();
for (int idx = 1; pEnvVarPair; idx++)
{
    ...
    pEnvVarPair = *(GetEnviron<T*>() + idx);
};
它位于ifdef#ifdef(ifdef)CRT(使用)WINAPI(家庭)桌面(应用)下

Mac有类似的功能吗


我是否遗漏了一些明显的内容?

main的第三个参数是一个env变量数组。这将转储环境:

#include <iostream>

int main(int argc, char **argv, char **env) {
    for (int i=0; env[i]!= NULL; i++) {
        std::cout << env[i] << std::endl;
    }

    return 0;
}
运行输出:

$ ./env
NDK=/Users/spartygw/android-ndk
SSH_AGENT_PID=18108
TERM_PROGRAM=Apple_Terminal
ANDROID_HOME=/Users/spartygw/Library/Android/sdk
TERM=xterm-256color
SHELL=/bin/bash
CLICOLOR=1
TMPDIR=/var/folders/97/hlbrfp294kdbf182909shsqw0000gn/T/
GRADLE_HOME=/Users/spartygw/bin/gradle
TERM_PROGRAM_VERSION=433
CVSROOT=gwarren@vpdsec.net:/home/cvs/virnetx
TERM_SESSION_ID=EC6955BE-1149-4A56-8C3E-3C86B315048E
USER=spartygw
NDKROOT=/Users/spartygw/android-ndk
SSH_AUTH_SOCK=/var/folders/97/hlbrfp294kdbf182909shsqw0000gn/T//sshg8KJIbhlLFRt/agent.18106
__CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0
color_prompt=yes
PATH=/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Users/spartygw/bin/gradle/bin:/Users/spartygw/bin
PWD=/tmp
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/
LANG=en_US.UTF-8
XPC_FLAGS=0x0
XPC_SERVICE_NAME=0
HOME=/Users/spartygw
SHLVL=2
CVS_RSH=ssh
DISPLAY=/private/tmp/com.apple.launchd.ZKUZySdPF2/org.macosforge.xquartz:0
如果出于某种原因您不想在
main
中捕获它,您可以通过全局var
environ
访问它。例如:

#include <iostream>

extern char **environ;

void dump_env() {
    for(char **var = environ; *var; var++) {
        std::cout << *var << std::endl;
    }
}

int main(int argc, char **argv) {
    dump_env();
    return 0;
}
#包括
外部字符**环境;
void dump_env(){
对于(char**var=environ;*var;var++){

std::coutmain
的第三个参数是一个环境变量数组。这将转储环境:

#include <iostream>

int main(int argc, char **argv, char **env) {
    for (int i=0; env[i]!= NULL; i++) {
        std::cout << env[i] << std::endl;
    }

    return 0;
}
运行输出:

$ ./env
NDK=/Users/spartygw/android-ndk
SSH_AGENT_PID=18108
TERM_PROGRAM=Apple_Terminal
ANDROID_HOME=/Users/spartygw/Library/Android/sdk
TERM=xterm-256color
SHELL=/bin/bash
CLICOLOR=1
TMPDIR=/var/folders/97/hlbrfp294kdbf182909shsqw0000gn/T/
GRADLE_HOME=/Users/spartygw/bin/gradle
TERM_PROGRAM_VERSION=433
CVSROOT=gwarren@vpdsec.net:/home/cvs/virnetx
TERM_SESSION_ID=EC6955BE-1149-4A56-8C3E-3C86B315048E
USER=spartygw
NDKROOT=/Users/spartygw/android-ndk
SSH_AUTH_SOCK=/var/folders/97/hlbrfp294kdbf182909shsqw0000gn/T//sshg8KJIbhlLFRt/agent.18106
__CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0
color_prompt=yes
PATH=/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Users/spartygw/bin/gradle/bin:/Users/spartygw/bin
PWD=/tmp
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/
LANG=en_US.UTF-8
XPC_FLAGS=0x0
XPC_SERVICE_NAME=0
HOME=/Users/spartygw
SHLVL=2
CVS_RSH=ssh
DISPLAY=/private/tmp/com.apple.launchd.ZKUZySdPF2/org.macosforge.xquartz:0
如果出于某种原因您不想在
main
中捕获它,您可以通过全局var
environ
访问它。例如:

#include <iostream>

extern char **environ;

void dump_env() {
    for(char **var = environ; *var; var++) {
        std::cout << *var << std::endl;
    }
}

int main(int argc, char **argv) {
    dump_env();
    return 0;
}
#包括
外部字符**环境;
void dump_env(){
对于(char**var=environ;*var;var++){

std::我想OP是不是在寻找一个与外部wchar\u t**\u wenviron;
等价的东西(注意类型)我不认为macOS上有这样的事情。@rustyx不,这不是重复的,因为这是关于wchat_t变量的,特别是现有问题没有涉及的变量。请撤消关闭问题。好的,我明白了。不,POSIX系统上没有wenviron。但是
环境
应该用UTF-8正确编码。@rustyx我明白了…谢谢!Ar你知道main的第三个参数是一个env vars数组吗?我想OP正在寻找一个与
extern wchar\u t**\u wenviron;
(注意类型)我不认为macOS上有这样的事情。@rustyx不,这不是重复的,因为这是关于wchat_t变量的,特别是现有问题没有涉及的变量。请撤消关闭问题。好的,我明白了。不,POSIX系统上没有wenviron。但是
环境
应该用UTF-8正确编码。@rustyx我明白了…谢谢!Ar你知道main的第三个参数是一个env vars数组吗?谢谢你提供的信息,我实际上不知道,但是我想知道wchar\u t*不是char*。我可以从**环境系统变量中获取char*形式的环境变量。在Windows上,有一个单独的变量**wenviron用于此目的,而Mac上不存在(至少我还没找到——也许是我太蠢了)所以我想知道Mac的机制是什么是的,我更新了我的答案。你可以在任何地方获得
environ
数组。它总是一个字符**谢谢你提供的信息,我实际上并不知道,但是我想知道的是wchar\u t*不是char*。我可以从**environ系统变量中获得环境变量作为char*。在Windows有一个单独的变量**\u wenviron在Mac上不存在(至少我没有找到它-可能是我太笨了),所以我想知道Mac的机制是什么是的,我更新了我的答案。你可以在任何地方得到
环境
数组。它总是一个字符**