c - 在构造的字符串上使用 execvp 的问题

标签 c string execvp

我正在尝试编写一个 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/

相关文章:

c - 如何避免动态分配内存以节省时间?

python - 接受争论

.net - 在 C++/CLI 中 char* 和 System::String 之间转换的最佳方法是什么

java - 字符串替换错误 : id. replace(ch, "") 不工作

创建一个没有 fork() 的子进程

execvp 和 wait() 之后无法重新获得控制权

c - 使用 bfd 数据结构的目标文件中的节数

.net - 需要 C#/C++ DLL 建议

c - 无法修改c中堆栈上的字符串

c - execvp-ls : fts_open: No such file or directory