我正在构建一个基本的shell程序,并使用while循环不断提示用户,他们可以输入命令来运行。当用户输入“退出”时,我希望我的shell程序终止。我使用fgets获取用户输入,并使用strtok将其解析为数组cmdArr
。
int j = 0;
char **cmdArr;
char inputsp[128];
char *cmds;
printf("==>");
fgets(inputs, 128, stdin);
cmds = strtok(inputs, " ");
while (j<1) {
i = 0;
while (cmds != NULL) {
cmdArr[i] = cmds;
cmds = strtok(NULL, " ");
i++;
}
if (strcmp(cmdArr[0], "exit") == 0) {
printf("exit command passed\n");
exit(0);
}
else {
printf("==>");
fgets(inputs, 128, stdin);
cmds = strtok(inputs, " ");
}
}
当我键入exit时,我通过printf
设置cmdArr [0]来确认cmdArr [0]存储了字符串“ exit”。当我打印出strcmp(cmdArr[0], "exit")
的值时,我总是得到的值为10,而我完全不知道为什么。我相信它们是两个相同的字符串,所以strcmp
应该返回0正确吗?
答案 0 :(得分:1)
fgets
不会从它读取的字符串中删除换行符,即使它是从stdin
中读取的。 strcmp
的返回值是字符串之间的不同之处,首先是字符串之间的差异,即换行符,其ASCII值为10
。