10

C++ でプログラミングする場合、個々の環境変数にgetenv.

また、os x ターミナルでは、env.

実行中の C++ プログラムで使用できる環境変数の完全なリストを取得したいと考えています。それらを一覧表示する ac/c++ 関数はありますか? envつまり、私の C++ コードから呼び出す方法はありますか?

4

3 に答える 3

14

environグローバル変数を使用します。これは、形式 の文字列の配列へのヌル終了ポインターですname=value。のミニチュア クローンを次に示しenvます。

#include <stdlib.h>
#include <stdio.h>

extern char **environ;

int main(int argc, char **argv) {
    for(char **current = environ; *current; current++) {
        puts(*current);
    }
    return EXIT_SUCCESS;
}
于 2013-05-27T02:25:21.267 に答える
13

移植性のないenvp引数を使用して、次のことができる場合がありますmain

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

おまけとして、他のOSが提供する情報を提供するAppleOSXを持っているようです:

int main(int argc, char **argv, char **envp, char **apple)

しかし、それは何のために使われますか?Apple は、apple ベクトルを使用して、必要な「隠し」パラメータを任意のプログラムに渡すことができます。そして、彼らも実際にそれを使用しています。現在、apple[0] には、実行中のバイナリがディスク上で見つかったパスが含まれています。何て言うの?apple[0] は argv[0] とどう違うのですか? 違いは、execve(2) が呼び出されたときに argv[0] を任意の値に設定できることです。たとえば、シェルは多くの場合、argv[0] の最初の文字を - にしてログイン シェルを開始することで、ログイン シェルと通常のシェルを区別します。

于 2013-05-27T02:20:57.117 に答える
0

systemおっと、端末コマンドを実行できることを忘れていました。

このスニペットは、私が必要とするものを提供します:

std::cout << "List of environment variables: << std::endl;
system("env");
于 2013-05-27T02:23:43.233 に答える