【问题标题】:String comparison function字符串比较函数
【发布时间】:2015-02-16 21:42:25
【问题描述】:

我是 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”,然后按 Enter。然后它崩溃了=\

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

【问题讨论】:

  • 编译程序时出现警告。
  • 无关:忘记你见过gets()这个函数,这个函数太卑鄙了,已经从标准库中删除了。
  • 崩溃时抛出的错误信息是什么?
  • 崩溃时没有显示消息。命令提示符只是说程序不工作,我需要关闭程序。 @WhozCraig 你会建议什么而不是 gets()?
  • @Mango fgets() 是一个不错的选择,如果你的目标平台支持它,也可以使用getline()

标签: c string function comparison compare


【解决方案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 类型的大小,因为您真正需要的是@987654339 的字符数@ 指向,所以你必须使用strlen() 或者自己计算长度。

【讨论】:

  • 所以用 C 你可以用 == 比较字符串和字符?
  • 没有ch[i]ith 字符,因此您将字符与字符进行比较。
  • 比较工作的字符。谢谢你的解释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 2016-01-26
  • 2016-04-28
相关资源
最近更新 更多