我的代码假设循环执行命令,然后执行命令直到命令退出。当它运行时,我得到一个永无止境的循环。
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");
}
}
答案 0 :(得分:3)
将第13行更改为
p=&command[numOfArgs][0];
您还需要使用\0
终止命令。
答案 1 :(得分:0)
已经指出了实际问题,即没有终止空值,即“\ 0”。但只是详细说明会发生什么。
由于您通过char而不是sprintf或获取等来获取输入char,因此您的命令[index]不会以null结束。
由于没有终止null,strcmp,永远不会在正确的比较中终止,而是保持比较直到找到null 。因此,它总是导致不匹配并继续循环。