如何清除c中的字符指针数组?

时间:2014-01-26 21:52:08

标签: c arrays linux shell pointers

我正在尝试在C中实现基本的Unix Shell。我的程序将用户的命令存储在char ** args中。这是我的问题:

当我向用户询问命令时,e.x ls,ls存储在args [0]中。然后我分叉子进程并使用execvp执行命令。现在,下次用户输入另一个命令时,再次说ls,它存储在args [1]中。所以我不能使用execvp执行此命令。

我不想遍历数组寻找ls或 对于任何其他争论,因为那时程序将执行随机参数。

我需要一种清空args的方法,以便我可以重写args [1]。

int main() {
    pid_t childPro;
    pid_t parentPro;
    int i,r,argCount,status,pipeCount,changeOut;
    char **args;

    while(1) {
        argCount=0; 
        printf("davedShell$ "); 
        args = getln(); 

if(argCount>=1) {
    //Creating a child process through fork 
    childPro =fork (); 

    if(childPro==0){
        printf("Child Process: %d successfully created\n",(int) getpid());
        execvp(args[0],args);  
    }
    else if (childPro == -1) {
        printf("Fork Failed- Exiting"); 
    exit(1); 
    }
    parentPro = wait(&status);
    }

1 个答案:

答案 0 :(得分:0)

如果您了解Getln(),您可以回答自己的问题,为什么不Getln(& args)?为args分配的内存在哪里?为函数中的args分配内存并返回指向内存的指针必须正确处理,否则你可能会获得指向堆栈或寄存器的指针,具体取决于目标架构