2010-11-27 17 views

答えて

17
#include <unistd.h> 
#include <stdio.h> 

extern char **environ; 
//... 

int i = 0; 
while(environ[i]) { 
    printf("%s\n", environ[i++]); // prints in form of "variable=value" 
} 
+0

を意味していますか?だからenvironは実際には文字のポインタの配列ですね。配列内の各文字ポインタは、環境変数right?を指します。 –

+1

各ポインタは、 "variable = value"の形式の文字列(ええ、char配列)を指しています。最後のエントリはヌルポインタで、上のループを終了します。 – sje397

+0

ありがとうございます:)あなたはとても有益なコメントでした。 –

2

は、あなたは私が必要な正確に何

int main(int argc, char **argv, char **envp) 
{ 
    while(*envp!=null) { 
     printf("%s\n", *envp); 
     envp++; 
    } 
    return 0; 
} 
+4

いいえ、 'extern char ** environ;'はPOSIX標準です。 'main'のこの署名は完全に非標準です。 –

+0

あなたは完全に正しいです。しかしながら。それが私が尋ねた理由です。 HPUX 10i、11.0、および11iのccの下で、Solaris 9および10のgccで正しくコンパイルされて実行されます。 DEC UnixとDGUXの旧バージョンでもコンパイルして実行しました。要点は、** environと古いint main(int、char **、char *)を混乱させるということです。私は検証するために私のK&Rを持っていない、または私はそこにそれを主張するだろう。あなたのK&Rは何を言いますか? –

関連する問題