我要创建一个简单的命令解释器,允许用户像在任何命令行中一样输入命令,但在 2 个参数后发生错误

I am to create a simple Command Interpreter that allows user to input commands like in any command line, but error occurs after 2 arguments

命令行/输出

Enter command: mkdir one
Enter command: touch one/file one/other one/more
Error: Bad address
Enter command: ^Z

c++源代码

int main(int argc, char *argv[]){

int rs;
int count = 0;
pid_t pid;

char input[100];
char* temp;
char* arg[6] = { (char*)0, (char*)0, (char*)0, (char*)0, (char*)0, (char*)0 };
               //command    arg1      arg2      arg3      arg4      NULL    

while(true){
    cout << "Enter command: ";
    cin.getline(input, 100);


for( temp = strtok(input, " "); temp; temp = strtok(NULL, " ") )
        {
        arg[count++] = temp;    
        }   

    pid = fork();
    if(pid == -1){
    perror("Error");
    exit(EXIT_FAILURE);
    }
    if(pid == 0){

        /*child process*/
        /*if(count < 2){     
        rs = execlp(arg[0],arg[0],arg[1],NULL);
        cout << "arg[0]: " << arg[0] << "arg[1]: " << arg[1] << endl;
        }
        else if(count < 3){
        rs = execlp(arg[0],arg[0],arg[1],arg[2],NULL);
        cout << "arg[0]: " << arg[0] << "arg[1]: " << arg[1]
             << "arg[2]: " << arg[2] << endl;
        }
        else if(count < 4){
        rs = execlp(arg[0],arg[0],arg[1],arg[2],arg[3],NULL);
        cout << "arg[0]: " << arg[0] << "arg[1]: " << arg[1]
             << "arg[2]: " << arg[2] << "arg[3]: " << arg[3] << endl;
        }
        else if(count < 5){
        rs = execlp(arg[0],arg[0],arg[1],arg[2],arg[3],arg[4],NULL);
        cout << "arg[0]: " << arg[0] << "arg[1]: " << arg[1]
             << "arg[2]: " << arg[2] << "arg[3]: " << arg[3]
             << "arg[4]: " << arg[4] << endl;
        }*/
        rs = execvp(arg[0],arg);

        if(rs == -1){
        perror("Error");
        exit(EXIT_FAILURE);
        }

      } 
    else{
        /*parent process*/
    wait(NULL);     
        }
      }//end-while

    }//end program

你可以看到我评论的 if-else 尝试不同路线的语句,但在 all.I 没有帮助假设我的问题是使用 execvp 但我没有明白为什么。感谢任何反馈。

arg[count++]

您需要在执行每个命令后将 count 重置为 0