2010-06-08 64 views
0

我試圖做一些很簡單:填補字符**與論據我想在execvp呼叫C.字符** nargv是空的,但不知道爲什麼

使用這是怎麼了這樣做的:

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( 「命令」,nargv)我的論點沒有通過。怎麼了 ?我試圖與gdb一起玩,但沒有成功。

問候

回答

5

既然你做++nargv,你nargv指針最終指向過去的數組的末尾。保留一個指向初始成員的指針並將其傳遞給exec。此外,*nargv++ = '\0'看起來像一個錯誤,因爲您將一個字符分配給指向char的指針。

+0

'\ 0'的好處。我會解決這個問題。 對於你的答案的其他部分,你能告訴我一些代碼來做到這一點嗎?我沒有得到它:p thanx – 2010-06-08 15:20:00

+2

它的'像這樣 - 如果你以p = top和loop p ++開始,那麼在循環結束時p將指向列表的* end *,而不是開始。你需要通過開始,即頂部不是p。 – eemz 2010-06-08 15:36:52

+1

或者,使用數組索引:如果你做* nargv ++,你修改nargv,但是如果你做nargv [i ++],你只修改索引i並且可以將完整的nargv傳遞給exec。 – 2010-06-08 18:18:24

相關問題