我正在尝试编写一个 shell,其构造的一部分是从用户输入的字符串(缓冲区)执行代码。然而,当我尝试使用附加输入(ae.echo a)执行字符串时,它总是搞砸并返回-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 的第二个参数是一个指针数组。通过此转换,您可以隐藏编译器警告,但它不起作用。
关于c - 在构造的字符串上使用 execvp 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13779872/