字符串比较功能

时间:2015-02-16 21:42:25

标签: c string function comparison compare

我是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程序员。

1 个答案:

答案 0 :(得分:1)

这是错误的

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运算符,因为cchar的数组并且sizeof运算符将以字节为单位给出它的大小,并且从1 char == 1 byte起它就可以了。

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