Comment detail

環境変数の取得 (Nested Flatten)

環境を選ぶかもしれません。

環境変数名=値

という文字列の配列なので、strtokで分割。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[], char *envp[])
{
    char **p;
    char *name;
    char *value;

    for(p = envp; p != NULL; p++) {
        name  = strtok(*p, "=");
        value = strtok(NULL, "=");
        printf("%s = %s\n", name, value);
    }

    return 0;
}
ども、raynstardです。
環境には依存しないと思いますが、
入力データを壊してしまうので基本的に直接strtok()は、
まずいいんじゃないでしょうか?
# forkとかexec*したときとか

このコードなら問題ないからやっているだけかもしれませんが。。。
ちょっと気になりました。
はい、envpはANSI Cでは規定されていないので、実装されていない処理系があることを想定したほうが良いと思います。というわけで<stdlib.h>のgetenv関数を使いました。ただし、こちらは名前から引くことしかできません。 なお、該当する名前の環境変数がなければNULLを返すので、条件演算子で振り分けています。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv)
{
    if (argc > 1)
    {
        const char* env = getenv(argv[1]);
        printf("$%s = %s\n",
            argv[1], env ? env
                         : "(none)");
    }
}

Index

Feed

Other

Link

Pathtraq

loading...