用C语言制作外壳的麻烦

用C语言制作外壳的麻烦,c,linux,shell,process,C,Linux,Shell,Process,所以我尝试用c语言编写一个shell脚本。它必须做到以下几点: *用户输入时退出;退出 *处理最多包含一个参数的命令 作为一名内部流程和流程控制的初学者,我遇到了一些问题,可以在正确的方向上使用一个点。由于某种原因,无论输入什么,它都无法执行。这就是我现在所拥有的,我错过了什么吗?还是我做错了什么 int main(){ int total_args; char *arg[3]; pid_t cpid; char shell_pro

所以我尝试用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的后续调用将写入超出已分配存储范围的内容


还请注意,我删除了。

只是出于好奇…为什么
而(!0)
?为什么不
(1)
?您的代码中没有短语“执行失败”。请阅读@SouravGhosh,我想这就是我经常做的,坏习惯。抱歉,如果您的
条件解析为
true
@RobertHarvey拼写错误,那么它将打印“无法执行”,因为您的
if
条件均未修复,对此表示抱歉。看看你的阅读,虽然我不确定我的代码是否正确或结构是否正确时很难调试。嘿,谢谢Paul,不过+1只是我复制代码时犯的一个错误。(文本编辑器不允许我复制和粘贴)编辑:不用担心,谢谢保罗。是演员把我搞错了