来自两个不同数组的字符匹配,尽管它们不同

时间:2019-04-04 20:19:02

标签: c arrays char

我定义了一个函数,当调用它并给定两个字符串时,应检查第二个字符串中是否存在第一个字符串的字母。这是我的代码:

int lettersOfAInB(char a[], char b[])
{
    int count = 0;

    for(int i = 0; a[i] !='\0'; i++)
    {
        count = 0;
        for(int j = 0; b[j] !='\0'; j++)
        {
            if(a[i] == b[j])
            {
                count = 1;
                break;
            }
        }
        if(count == 0)
            return 0;
    }
    return 1;
}

int main() 
{
    char a[5] = "zc";
    char b[4] = "oabq";
    int is;

    is = lettersOfAInB(a, b);

    if(is)
        printf("Yes");

    printf("\n");
    return 0;
}

这将始终输出“是”,而不管我给定的字符串如何。有人可以解释一下为什么吗?谢谢。

1 个答案:

答案 0 :(得分:1)

  

有人可以向我解释为什么吗?

未定义行为(UB)

for(int j = 0; b[j] !='\0'; j++)尝试访问char b[4]的4个元素之外的内容。结果UB。可能发生任何事情。


如果将其编码为将char b[]视为 string (具有 null字符的数组),则允许编译器根据需要调整数组大小< / p>

// char b[4] = "oabq";
char b[] = "oabq";  // now `b[]` has 5 ellements