c - 在 C 中制作 shell 时遇到问题

标签 c linux shell process

所以我正在尝试用 c 编写一个 shell 脚本。它必须执行以下操作: *退出用户输入;辞职 *处理一个最多有一个参数的命令

作为内部流程和流程控制的初学者,我遇到了麻烦,可以在正确的方向上使用一点。由于某种原因,无论输入什么,它都只能打印无法执行。这就是我现在所拥有的,我错过了什么吗?还是我做错了什么?

    int main(){
       int total_args;
       char *arg[3];
       pid_t cpid;
       char shell_prompt[] = "console:";
       char line[MAX_LINE];
       char command[MAX_LINE];
       char argument[MAX_LINE];

       while(!0){
           printf("%s", shell_prompt);
           fgets(line, MAX_LINE, stdin);
           total_args = sscanf(line, "%s %s", command, command_argument);
           arg[0] =  (char *) malloc(strlen(command));
         .....

   }

最佳答案

当您为要复制的字符串分配存储空间时,您需要为 '\0' 终止符添加一个额外的字符,因此:

           arg[1] = (char *) malloc(strlen(command_argument));

需要:

           arg[1] = malloc(strlen(command_argument) + 1);

否则对 strcpy 的后续调用将超出分配的存储范围进行写入。

另请注意,我已经删除了 redundant and potentially dangerous cast on the result of of malloc .

关于c - 在 C 中制作 shell 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27099633/

相关文章:

c - EXC_BAD_ACCESS 在 C 中的结构内的字符数组上使用 QSort

linux - 如何处理带空格的路径变量

Linux 网络驱动程序端口到 ARM

bash - 如何获取 `ls` 命令的前 n 行

shell - 如果我使用 nohup 运行一个脚本,该脚本又调用另一个脚本,那么另一个脚本是否受 nohup 影响?

c - 检查文件在 C 中是否唯一的好方法

c - Y 不递增

c - 将文本文件读取到 C 中的行数组中

Linux CentOS 为每个具有已知结构的目录重命名文件

bash - Unix:从 .dat 文件中提取数据并插入 SQL 数据库?