[英]Execvp() is not accepting 'ls' as Argument
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#define MAX_LIMIT 20
int main () {
printf("Shell> ");
char str1[MAX_LIMIT];
fgets(str1, MAX_LIMIT, stdin);
char delim[] =" ";
char *parsed;
int index = 0;
char *cmd[index];
parsed = strtok(str1,delim);
while( parsed != NULL) {
cmd[index] = parsed;
index++;
parsed = strtok(NULL, delim);
}
cmd[index] = NULL;
int wow = fork();
if(wow == 0){
execvp((char*)cmd[0],cmd);
}
return(0);
}
除了execvp()cmd [0]接收字符串'ls'以外,上面的一切工作正常,從技術上講execvp()應該顯示列表,但不能顯示列表。 如果我將cmd [0]替換為'ls',則可以使用。
這里有兩個主要問題。
首先,當您將數組聲明為char *cmd[index];
,隨着index
變化,數組的大小不依賴於index
當前值。 它將大小設置為index
的當前值為0。創建大小為0的數組會調用未定義的行為 。 您需要為陣列設置一個固定大小,該大小應足以滿足您的需求。
char *cmd[MAX_LIMIT];
另一個問題是您選擇的定界符。 fgets
函數讀取輸入結尾處包括換行符的文本行 。 因此,最后讀取的哪個參數的末尾都有一個\\n
。 要解決此問題,請在定界符列表中添加\\n
。
char delim[] =" \n";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.