我正在尝试创建一个shell,并且无法尝试用用户输入填充* argv []数组。我打电话给我的解析函数,并将每个单词存储到一个二维数组。我尝试了许多不同的方法将它直接存储到* argv []中,但最终决定尝试使用2d数组。无论如何填充* argv []指针指向存储在二维数组中的字符串?或者用指向字符串的指针填充* argv []而不使用2d数组?如何填充指针指向另一个数组中存储的字符串的字符指针数组?
我试过很多其他的东西,但我目前的尝试是调用解析函数后的while循环。
int main() {
int status, fRedirect, i;
pid_t pid;
char s[STORAGE];
char p[MAXITEM][STORAGE];
char *argv[MAXITEM];
for(;;) {
printf("\2: ");
scanf("%s", s);
parse(s, p);
while(p[i] != '\0') {
args[i] = *p[i];
}
if(p[0] == EOF)
break;
if(p[0] == '\0')
continue;
pid = fork();
if(pid == 0) {
if(execvp(*p, p) == -1) {
printf("Execution failed!\n");
exit(9);
}
}
if(pid != 0) {
wait(-1, &status, 0);
}
else {
fRedirect = open("/dev/null", O_WRONLY);
dup2(fRedirect, STDOUT_FILENO);
}
}
/*killpg(getpid(), SIGTERM);*/
printf("p2 terminated. \n");
exit(0);
}
void parse(char *s, char p[][STORAGE]) {
int i, j = 0;
while(*s != EOF && *s != '&' && *s != '\n' && *s != ';' && *s != '\0') {
for(i=0; i < strlen(s); i++)
p[j][i] = s[i];
i = i+getword(s);
j++;
}
}
提示:您解析函数应该从个饱argv的,可能使用的strdup每个条目,那么你的execvp应该像execvp(的argv [0],argv的);.请注意,从scanf扫描的字符串将永远不会包含EOF。 –
在上面的评论中,我应该说“strtok和strdup”不只是strdup –
我的解析函数应该返回char **吗?或者它是否在解析函数之外被填充? – trawww