比较C中的字符

Shi*_*lnu 3 c function character

我有一个关于在函数内比较C中字符串的单个字符的问题.代码如下所示:

int fq(char *s1){
int i;
for(i=0;i<strlen(s1);i++){
    if(s1[i]=="?"){
        printf("yes");
    }
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)

即使s1 ="???" 它永远不会打印出来.我设法解决了这个问题,但我很好奇为什么它以一种方式工作而不是另一种方式.这是一段有效的代码:

int fq(char *s1,char *s2){
int i;
char q[]="?";
for(i=0;i<strlen(s1);i++){
    if(s1[i]==q[0]){
        printf("yes");
    }
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)

Iha*_*imi 5

因为第一个样本比较地址而不是字符.

c和==操作符在应用于数组或指针时没有字符串类型,比较地址而不是内容.

你的功能会像这样正确地写出来

int fq(char *s1,char *s2)
{
    int i;
    for (i = 0 ; s1[i] ; ++i)
    {
        if (s1[i] == 'q')
            printf("yes");
    }

    return 1;
}
Run Code Online (Sandbox Code Playgroud)

你可以比较s1[i]'q'.