【发布时间】:2018-08-30 20:14:08
【问题描述】:
我正在构建一个基本的 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 时,我已经确认 cmdArr[0] 通过printfing cmdArr[0] 存储字符串“exit”。当我打印出 strcmp(cmdArr[0], "exit") 的值时,我总是得到 10 的值,我也不完全确定为什么。我相信它们是相同的两个字符串,所以 strcmp 应该返回 0 正确吗?
【问题讨论】:
-
10 是换行符的 ASCII 码,因此您的一个字符串末尾有一个换行符,而另一个则没有。