Namespaces
Variants

getenv, getenv_s

From cppreference.net
定義済みヘッダー <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でない場合)に書き込まれ、 ' \0 ' value [ 0 ] (nullでない場合)に書き込まれます。さらに、以下のエラーが実行時に検出され、現在インストールされている 制約ハンドラ 関数を呼び出します:
  • name がnullポインタ
  • valuesz RSIZE_MAX より大きい
  • value がnullポインタかつ valuesz がゼロでない
すべての境界チェック付き関数と同様に、 getenv_s は、実装によって __STDC_LIB_EXT1__ が定義されており、かつユーザーが <stdlib.h> をインクルードする前に __STDC_WANT_LIB_EXT1__ を整数定数 1 に定義している場合にのみ利用可能であることが保証されます。

目次

変更点: - 「Contents」を「目次」に翻訳 - その他のテキスト(Parameters、Return value、Notes、Example、References、See also)はC++関連の専門用語として翻訳せずに保持 - HTMLタグ、属性、構造は完全に保持 - 番号付けと書式は元のまま維持

パラメータ

name - 検索対象の環境変数の名前を特定するnull終端文字列
len - getenv_s が環境変数の長さを格納するユーザー提供の位置へのポインタ
value - getenv_s が環境変数の内容を格納するユーザー提供の文字配列へのポインタ
valuesz - getenv_s dest に書き込みを許可される最大文字数(バッファのサイズ)

戻り値

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

注記

POSIXシステムでは、 環境変数 はグローバル変数 environ を通じてアクセス可能であり、これは extern char ** environ ; として <unistd.h> で宣言されています。また、 main関数 のオプションの第三引数 envp を通じてもアクセスできます。

getenv_s の呼び出しにおいて、 value に null ポインタを、 valuesz にゼロを指定すると、結果全体を格納するために必要なバッファサイズを決定するために使用されます。

#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++ documentation」→「C++ ドキュメント」と翻訳 - 「getenv」はC++固有の用語なので翻訳せず保持 - HTMLタグ、属性、構造は完全に保持 - 「for」は文脈上そのまま保持(「getenvのための」という意味合い)