字符串比较函数

String comparison function

我是 C 语言的新手,正在尝试找出并了解我的代码无法正常工作的原因。我知道在 C 中,字符串基本上是每个字符的数组。所以我一直在尝试搜索数组以找到字母 a,如果找到则打印一些内容。但是每次我尝试 运行 我的程序总是崩溃。

这是我的代码:

#include <stdio.h>

void Display(char ch[]);

int main() {
    char c[50];
    printf("Enter String: ");
    gets(c);             
    Display(c);

    return 0;
}

void Display(char ch[]) {
    int i;
    for (i = 0; i < (sizeof(ch)); i++) {
        if (strcmp(ch[i],"a") == 0) {
            printf( "Yes");
        }
    }
}

当我 运行 我的程序时,我输入一个随机字符串,例如 "fdas" 并按回车键。然后它崩溃了=\

请记住我是 C 的新手。我是 Java 程序员,如果这有助于任何解释。

这是错误的

if(strcmp(ch[i],"a") == 0)

应该是

if (ch[i] == 'a')

而且,sizeof(ch) 没有给你字符串的长度,因为你需要 strlen(),你的 Display() 函数应该像这样工作

void Display(char *ch) {
    size_t i;
    size_t length;
    if (ch == NULL)
        return;
    length = strlen(ch);
    for (i = 0 ; i < length ; i++) {
        if (ch[i] == 'a') {
            printf( "Yes");
        }
    }
}

此外,使用 gets() 是不安全的,已弃用,请使用 fgets()

fgets(c, sizeof(c), stdin);

优于 gets(c) 因为它会防止缓冲区溢出,请注意我在这种情况下使用了 sizeof 运算符,因为 c 是 [=22 的数组=] 和 sizeof 运算符将以字节为单位给出它的大小,并且由于 1 char == 1 byte 然后它可以工作。

Display() 函数的情况下,它是不一样的,因为 sizeof 运算符将给出 ch 类型的大小,因为你真正需要的是是 ch 指向的字符数,所以你必须使用 strlen() 或自己计算长度。