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

标签 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;
}

无论我作为参数提供的字符串如何,这将始终输出"is"。有人可以解释一下为什么吗?谢谢。

最佳答案

Could someone explain me why please?

未定义行为(UB)

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


如果将其编码为将char b[] 视为字符串(具有空字符 的数组),则允许编译器需要的数组大小

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

关于来自两个不同数组的字符匹配,尽管它们不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55524274/

相关文章:

javascript - JS if/else 访问多个数组元素

char - 强制 telnet 客户端进入字符模式

c - eclipse错误找不到-l/usr/lib/gcc/x86_64-linux-gnu/4.8/include/libcrypto

在堆栈顶部推送任何超过 127 的数字后,代码将停止工作

c++ - fprintf()/std::cout 不会将字符串的一部分打印到 stdout/stderr

c++ - 在 C 和 C++ 指针表示法中将星号放在哪里

java - 根据字符串的长度分割字符串

arrays - 如何确定SceneKit中哪个childNode最接近屏幕中心?

在 C 中检查两个字符数组是否相等

java - 从文件中读取特定字符