首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何正确地比较C中的字符串?

如何正确地比较C中的字符串?
EN

Stack Overflow用户
提问于 2011-11-04 10:22:27
回答 8查看 543K关注 0票数 219

我正在尝试让一个程序让用户输入一个单词或字符,存储它,然后打印它,直到用户再次键入它,退出程序。我的代码如下所示:

代码语言:javascript
复制
#include <stdio.h>

int main()
{
    char input[40];
    char check[40];
    int i=0;
    printf("Hello!\nPlease enter a word or character:\n");
    gets(input);   /* obsolete function: do not use!! */
    printf("I will now repeat this until you type it back to me.\n");

    while (check != input)
    {
        printf("%s\n", input);
        gets(check);   /* obsolete function: do not use!! */
    }

    printf("Good bye!");
    

    return 0;
}

问题是我一直在打印输入字符串,即使用户的输入(check)与原始的( input )匹配。我是不是错误地比较了这两个?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-11-04 10:24:17

不能(有效地)使用!===比较字符串,需要使用strcmp

代码语言:javascript
复制
while (strcmp(check,input) != 0)

这是因为!===只会比较这些字符串的基地址。而不是字符串本身的内容。

票数 329
EN

Stack Overflow用户

发布于 2011-11-04 10:29:52

好的,有几件事:gets is unsafe和应该被替换为fgets(input, sizeof(input), stdin),这样你就不会得到缓冲区溢出。

接下来,要比较字符串,必须使用strcmp,其中返回值0表示两个字符串匹配。使用相等运算符(即!=)比较两个字符串的地址,而不是它们内部的单个char

还要注意,虽然在本例中不会造成问题,但fgets也将换行符'\n'存储在缓冲区中;gets()则不会。如果将来自fgets()的用户输入与字符串文字(如"abc" )进行比较,它将永远不会匹配(除非缓冲区太小,以至于'\n'无法放入其中)。

票数 37
EN

Stack Overflow用户

发布于 2016-02-13 15:14:40

使用strcmp

这是在string.h库中,并且非常流行。如果字符串相等,则strcmp返回0。有关strcmp返回内容的更好解释,请参阅this

基本上,你要做的是:

代码语言:javascript
复制
while (strcmp(check,input) != 0)

代码语言:javascript
复制
while (!strcmp(check,input))

代码语言:javascript
复制
while (strcmp(check,input))

你可以查看strcmp上的教程this

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8004237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档