getenv, getenv_s
提供: cppreference.com
ヘッダ <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
に書き込まれ (ヌルでなければ)、書き込まれたバイト数がユーザ提供の位置 *len に格納されます (ヌルでなければ)。 環境に環境変数が設定されていない場合は、ゼロが *len に書き込まれ (ヌルでなければ)、 '\0' が value[0] に書き込まれます (ヌルでなければ)。 さらに、以下のエラーが実行時に検出され、現在設定されている制約ハンドラ関数を呼びます。
-
name
がヌルポインタ。 -
valuesz
が RSIZE_MAX より大きい。 -
value
がヌルポインタまたはvaluesz
がゼロでない。
-
- すべての境界チェック付き関数と同様に、
getenv_s
は __STDC_LIB_EXT1__ が処理系によって定義されていて、<stdlib.h>
をインクルードする前にユーザが __STDC_WANT_LIB_EXT1__ を整数定数 1 に定義した場合にのみ、利用可能であることが保証されます。
目次 |
[編集] 引数
name | - | 検索する環境変数の名前を表すヌル終端文字列 |
len | - | 環境変数の長さを格納するユーザ提供の位置を指すポインタ |
value | - | 環境変数の内容を格納するユーザ提供の文字配列を指すポインタ |
valuesz | - | 格納先に書き込むことが許される最大文字数 (バッファのサイズ) |
[編集] 戻り値
1) 環境変数の値を表す文字列、またはそのような変数が見つからなかった場合はヌルポインタ。
2) 環境変数が見つかった場合はゼロ、見つからなかった場合または実行時制約違反が発生した場合は非ゼロ。 何らかのエラーが発生した場合、ゼロが *len に書き込まれます (
len
がヌルポインタでなければ)。[編集] ノート
POSIX システムでは、環境変数は <unistd.h>
で extern char **environ; として宣言されているグローバル変数 environ
および main 関数のオプショナルな第3引数 envp
を通してもアクセス可能です。
value
にヌルポインタを、 valuesz
にゼロを指定した getenv_s
の呼び出しは、結果全体を保持するために必要なバッファサイズを���定するために使用されます。
[編集] 例
Run this code
#include <stdio.h> #include <stdlib.h> int main(void) { char *env_p = getenv("PATH"); if (env_p) printf("PATH = %s\n", env_p); }
出力例:
PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin