1

小さな C プログラムを作成していて、実行可能ファイルが開始された引数のみを保持する char ポインター配列が必要です。現在、このコードはすべての環境変数も出力します。

int main (int argc, const char * argv[]) {
   while(argv) {
      NSLog(@"Parameter %s\n", *argv);
      argv++;
   }
}
4

2 に答える 2

2

に変更while(argv)while(*argv)ます。それはあなたにただの議論を与えるでしょう。

main()実際にはこのように呼び出されますmain(int argc, char **argv, char **environ)

何が起こっているかというと、あなたは通り過ぎargvて に入っていenvironます。この動作は未定義であり、依存すべきではありません。あなたのコードは、そのままで環境を通過し続け、止まらず、ゴミを出力します。

もちろん、別の方法で行うこともできます。

for(int i = 0; i < argc; i++) {
  NSLog(@"Parameter %s\n", argv[i]);
}

argv[0]にはプログラム名が含まれ、残りは引数です。

于 2013-11-05T14:39:41.823 に答える