コードenviron=NULL
を使用すると、そのプロセスの環境全体が消去されていることを意味します。全体の環境を消去する
しかし、なぜenvrion=NULL
はそのプロセスの環境全体を消去しているのだろうと思います。
基本的に、環境変数はプロセスのスタックアドレス範囲より下のアドレス空間にあります。
ので、environ
変数は、そのアドレス空間を示すされ、そしてenviron=NULL
はenviron
がちょうどもうそのアドレス空間を示すされていないことを意味し、私は環境変数のために存在するメモリの内容を消去しない意味します。
しかし、なぜこれは環境全体を消去するのですか?
私があなたを得ているなら、あなたは正しいです。このコードを使用すると、環境は無効になりますが、アドレス空間はまだ生きています。 [man](http://www.gnu.org/software/libc/manual/html_node/Environment-Access.html)のように:_配列の最後の要素はヌルポインタです。 – LPs
注意する必要がありますこれは** Unix特有の**です。 C言語自体には、実装定義の環境リスト*を検索するための 'getenv()'を定義する 'environ'という概念はありません。そして、Unixでさえ、 'extern char ** environ'が文字列へのポインタの配列を指していることと、この配列の最後のポインタがNULLという値を持っていることをマンページで定義しているので、' environ = NULL'基本的には未定義の動作を呼び出すことです。 – DevSolar
@John Bollinger 'envrion = NULL'と同じ' clearenv() 'ではなく' * envrion == NULL'ですか?したがって、 'environ = NULL'のとき、' setenv() 'または' putenv() 'は" name = value "文字列を指す新しい環境リストを作成します。 –