名前空間
変種
操作

getenv, getenv_s

From cppreference.com
< c‎ | program
ヘッダー <stdlib.h> で定義
char *getenv( const char *name );
(1)
errno_t getenv_s( size_t *restrict len, char *restrict value,
                  rsize_t valuesz, const char *restrict name );
(2) (C11 以降)
1) ホスト指定の環境リストで名前 `name` の環境変数を検索し、一致した環境変数に関連付けられた文字列へのポインタを返します。環境変数のセットおよびそれを変更する方法は、実装定義です。
この関数はスレッドセーフであることが要求されていません。`getenv` への別の呼び出し、および POSIX 関数 setenv()unsetenv()putenv() の呼び出しは、以前の呼び出しで返されたポインタを無効にするか、以前の呼び出しで取得された文字列を変更する可能性があります。
`getenv` によって返された文字列を変更すると、未定義の動作が発生します。
2) (1) と同じですが、環境変数の値はユーザー提供のバッファ `value` に書き込まれ(null でない場合)、書き込まれたバイト数はユーザー提供の場所 `*len` に格納されます(null でない場合)。環境変数が環境に設定されていない場合、`*len` にゼロ(null でない場合)が書き込まれ、`value[0]` に `'\0'`(null でない場合)が書き込まれます。さらに、次のエラーは実行時に検出され、現在インストールされている 制約ハンドラ 関数が呼び出されます。
  • name がヌルポインタである
  • valueszRSIZE_MAX より大きい
  • value がヌルポインタで、valuesz がゼロでない
すべての境界チェック関数と同様に、`getenv_s` は、実装によって `__STDC_LIB_EXT1__` が定義されており、ユーザーが `__STDC_WANT_LIB_EXT1__` を整数定数 `1` に定義して <stdlib.h> をインクルードした場合にのみ利用が保証されます。

目次

[編集] パラメータ

name - 検索する環境変数の名前を指定する、ナル終端された文字文字列
len - `getenv_s` が環境変数の長さを格納する、ユーザー提供の場所へのポインタ
value - `getenv_s` が環境変数の内容を格納する、ユーザー提供の文字配列へのポインタ
valuesz - `getenv_s` が `dest` に書き込むことを許可されている最大文字数(バッファのサイズ)

[編集] 戻り値

1) 環境変数の値を示す文字文字列、またはそのような変数が見つからなかった場合はヌルポインタ。
2) 環境変数が見つかった場合はゼロ、見つからなかった場合や実行時制約違反が発生した場合は非ゼロ。エラーが発生した場合、`*len` にゼロを書き込みます(`len` がヌルポインタでない場合)。

[編集] 注記

POSIX システムでは、環境変数は、<unistd.h> で `extern char **environ;` として宣言されているグローバル変数 `environ`、および main 関数のオプションの3番目の引数 `envp` を通じてもアクセス可能です。

`value` にヌルポインタ、`valuesz` にゼロを指定して `getenv_s` を呼び出すことは、全体の結果を保持するために必要なバッファサイズを決定するために使用されます。

[編集]

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    const char *name = "PATH";
    const char *env_p = getenv(name);
    if (env_p)
        printf("Your %s is %s\n", name, env_p);
}

実行結果の例

Your PATH is /home/gamer/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/share/games

[編集] 参照

  • C23標準 (ISO/IEC 9899:2024)
  • 7.22.4.6 getenv 関数 (p: TBD)
  • K.3.6.2.1 getenv_s 関数 (p: TBD)
  • C17標準 (ISO/IEC 9899:2018)
  • 7.22.4.6 getenv 関数 (p: 256-257)
  • K.3.6.2.1 getenv_s 関数 (p: 440-441)
  • C11標準 (ISO/IEC 9899:2011)
  • 7.22.4.6 getenv 関数 (p: 352-353)
  • K.3.6.2.1 getenv_s 関数 (p: 606-607)
  • C99標準 (ISO/IEC 9899:1999)
  • 7.20.4.5 getenv 関数 (p: 317)
  • C89/C90標準 (ISO/IEC 9899:1990)
  • 4.10.4.4 getenv 関数

[編集] 関連項目

C++ ドキュメント (`getenv` について)
English 日本語 中文(简体) 中文(繁體)