将String与char指针进行比较时,C strcmp()返回正数

时间:2016-10-20 06:53:02

标签: c string while-loop strcmp

我在C中有以下代码:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{

    char *buf;

    buf = malloc(sizeof(char) * 512);


    while(strcmp(buf, "Exit!") != 0 )
    {
        printf("Enter something:");
        fgets(buf, sizeof(char) * 512, stdin);
        printf("You entered %s\n", buf);

        printf("%d\n", strcmp(buf, "Exit!"));

    }

}

我想要的行为是当用户输入指定的whilestring循环终止。根据我的理解,我可以使用char指针来表示C中的string。我使用fgets()存储用户输入并使用strcmp()函数进行比较。我添加了一个调试语句,打印出这个比较的结果,当我输入“Exit!”时它返回一个正整数。应该终止while循环。

有人可以解释我错过了什么吗?我相信它与新的行字符或C-String终结符\0有关。当用户输入“退出”时,如何让while循环终止?

1 个答案:

答案 0 :(得分:1)

这是因为fgets保留了从键盘输入的newline,或者标记了文本文件中该行的结尾。

删除它的一种简单方法是:

#include <string.h>

//...

buf [ strcspn(buf, "\r\n") ] = 0;   // remove trailing newline etc