0

私は非常に簡単なことをしようとしています: C の execvp 呼び出しで使用したい引数を char** に入力します。

これが私がやっている方法です:

 if(argc >=1)
    {
      *nargv = "--action";
      while(argc--)
        {
          printf("nargv1 => %s \t argv1 => %s \n", *nargv, *argv);
          *++nargv = *argv++;
          printf("nargv2 => %s \t argv2 => %s \n", *nargv, *argv);
        }

      printf("nargv3 => %s \t argv3 => %s \n", *nargv, *argv);
      *nargv++ = '\0';
      printf("nargv4 => %s \t argv4 => %s \n", *nargv, *argv);
}

出力は私に与えます:

nargv1 => --action       argv1 => backup
nargv2 => backup         argv2 => --help
nargv1 => backup         argv1 => --help
nargv2 => --help         argv2 => (null)
nargv3 => --help         argv3 => (null)
nargv4 => (null)         argv4 => (null)

これは問題ないようです (nargv は正しく入力されています。少なくとも私はそう考えていました)> しかし、execvp("command",nargv) を実行すると、引数が渡されません。どうしたの ?私はgdbで遊んでみましたが成功しませんでした。

よろしく

4

1 に答える 1

5

あなたがそうしているので++nargv、あなたの nargv ポインタは配列の終わりを過ぎて指してしまいます。初期メンバーへのポインターを保持し、それを exec に渡します。また、*nargv++ = '\0'char へのポインターに char を割り当てるため、バグのように見えます。

于 2010-06-08T15:14:17.100 に答える