2014-01-12 240 views
0

我有一個數組args定義如下:將第二個元素索引到數組的末尾?

char *args[MAX_LINE/+1]; /* MAX_LINE = 80 */ 

我想通過args[0]execvp和陣列作爲第二個參數的其餘部分:

execvp(args[0], args[1-x]); 

我試圖倍數的東西。即:

execvp(args[0], args+MAX_LINE); /* args+MAX_LINE should point to the second element of the array (?) */ 

和寫入一個額外的功能,其將通過一個由移動的所有元素中刪除的陣列的第一個元素到左:

void getOpts(char *opts[]) 
{ 
int i = 0; /* index used in the for loop */ 

for(i=0;opts[i] != NULL;i++) 
    opts[i] = opts[i+1]; 
} 

此解決方案工作,但是部分地。問題是第二個元素有時可以是NULL。當execvp被調用時,系統返回一個錯誤。

有沒有簡單的方法來索引第二個元素到數組的末尾?

+3

恩,那是故意的分歧嗎? (MAX_LINE/+ 1)。這只是MAX_LINE。 – HostileFork

+1

使用指針算術:'args + 1'或括號表示法:'&args [1]'是要走的路。 –

回答

1

現在,args是衰減到指向數組第一個元素的指針的數組,因此args+1指向第二個元素。所以你的代碼應該是:

execvp(args[0], args+1); 
+0

或者,如果你覺得更容易考慮,execvp(args [0],&args [1])。 – addaon

+0

當然!這很明顯,爲什麼我沒有想到呢?謝謝! –

相關問題