当我在C [duplicate]中比较完全相同的字符串时,strcmp()返回10

问题描述 投票:-1回答:1

这个问题在这里已有答案:

我正在构建一个基本的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]通过printfing cmdArr [0]存储字符串“exit”。当我打印出strcmp(cmdArr[0], "exit")的值时,我总是得到10的值,我不知道为什么。我相信它们是相同的两个字符串,所以strcmp应该返回0正确吗?

c string equality strcmp
1个回答
1
投票

fgets不会从它读取的字符串中删除换行符,即使它是从stdin读取的。 strcmp的返回值是它们不同的第一个字符串之间的差异,即换行符,其具有ASCII值10

© www.soinside.com 2019 - 2024. All rights reserved.