0

我的代码假设循环执行命令,然后执行命令,直到命令退出。当它运行时,我得到一个永无止境的循环。

void run(){
    char command[100][100], *p;
    int numOfArgs;
    while(1){
        p=&command[0][0];
        numOfArgs = 0;
        while(getchar()!= '\n'){
            while(getchar()!= ' '){
                *p=getchar();
                p++;    //increased to next char in string
            }
            *p='\0';
            numOfArgs++;    //increases number of strings
            p=&command[numOfArgs][0]; //References p to location 0 of next string
        }
        if(strcmp(command[0], "/*command*/") == 0){
            //Do command
        }

        if(strcmp(command[0], "exit") == 0)
            return;

        else printf("Not a valid command");
    }
 }
4

2 回答 2

3

将第 13 行更改为

p=&command[numOfArgs][0];

您还需要使用\0.

于 2013-10-07T19:15:56.433 回答
0

实际问题已被指出,即没有终止空值,即“\0”。但只是详细说明会发生什么。

由于您按字符而不是 sprintf 或获取等方式获取输入字符,因此您的 command[index] 不会以空值终止。

由于没有终止 null,strcmp永远不会在正确的比较处终止,而是继续比较直到找到 null。因此它总是导致不匹配并继续循环。

于 2013-10-07T19:24:05.953 回答