我正在尝试编写一个 shell,其构造的一部分是从用户输入的字符串(缓冲区)执行代码。然而,当我尝试使用附加输入(ae.echo a)执行 execvp 字符串时,它总是会搞砸并返回 -1。我不知道为什么。这是相关的部分:
char * buffer = calloc(100, sizeof(char));
...
fgets(buffer, 100, stdin);
buffer[strlen(buffer) - 1] = 0; // necessary because of a newline inserted by fgets
...
cmd = strsep(&buffer, " ");
char * str = malloc(50 * sizeof(char));
strcat(str, "./");
strcat(str, cmd);
strcat(str, ".out");
...
i = execvp(str, (char * *) buffer);
论据buffer
是错的。第二个参数execvp
是一个指针数组。通过此转换,您可以隐藏编译器警告,但它不起作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)