提问人:jpc 提问时间:8/31/2018 更新时间:8/31/2018 访问量:3724
当我在 C [duplicate] 中比较完全相同的字符串时,strcmp() 返回 10
strcmp() returns 10 when I compare the exact same string in C [duplicate]
问:
我正在构建一个基本的 shell 程序,并使用 while 循环不断提示用户,他们可以输入命令运行。当用户输入“exit”时,我希望我的 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] 通过 ing cmdArr[0] 存储字符串“exit”。当我打印出 的值时,我总是得到 10 的值,我不完全确定为什么。我相信它们是相同的两个字符串,所以应该返回 0 正确吗?printf
strcmp(cmdArr[0], "exit")
strcmp
答:
4赞
Govind Parmar
8/31/2018
#1
fgets
不会从它读取的字符串中删除换行符,即使它是从 读取的。的返回值是字符串之间第一个不同的值,即换行符,其具有 ASCII 值。stdin
strcmp
10
评论
2赞
rici
8/31/2018
这是一种常见的实现,但标准没有指定它,依赖它是不明智的。您可以指望返回值的符号:如果它为零,则字符串相等,如果为负,则第一个字符串按字典顺序排在第一位,如果为正,则第二个字符串排在第一位。strcmp
0赞
Govind Parmar
8/31/2018
@rici我描述了 OP 系统上表现出的行为 - 但你是对的。
评论