最近,我試圖在C上做出一個良好的實踐,現在我開始執行一個命令。 它告訴我,我應該char**
?但我有一些概念錯誤嗎?在execvp中實現一個shell:錯誤的參數()
請幫幫我。 代碼在這裏
int excution(int cnt, char token[][BUFSIZE],int *t_token)
{
setenv ("PATH", "/bin:/bin/usr:", 1);
//printf("%s",getenv("PATH")); // check environement
const char *b_cd="cd";
const char *b_exit="exit";
const char *b_fg="fg";
const char *b_jobs="jobs";
int i,j,k;
//STEP 9:excute normal commanand
char args[cnt][BUFSIZE];
for(i=0;i<MAXARG;i++)
{
if(t_token[i]==COMMAND)
{
strcpy(args[0],token[i]); // copy 1st ARG
j=1;
while(t_token[i+1]==ARG)
{
strcpy(args[j],token[i+1]);
i++;
j++;
}
for(k=0;k<j;k++)
{
printf("%s\n", args[k]);
}
execvp (args[0], args);
}
}
它給我警告編譯。但它給分段錯誤如果更改2D陣列到char**
....
警告:從兼容的指針類型 傳遞「execvp」的參數2 [默認啓用] /usr/include/unistd.h :579:12:注:預計 'char * const的*',但參數的類型爲 'CHAR(*)[256]'
segfault必須發生,因爲您在那裏做了其他*錯誤。看到這個問題:http://www.cplusplus.com/forum/general/51468/ - 並請顯示您的失敗代碼。 – usr2564301