Персонажи из двух разных массивов совпадают, несмотря на то, что они разные - PullRequest
1 голос
/ 04 апреля 2019

Я определил функцию, которая должна при вызове и задании двух строк проверять, существуют ли буквы первой строки во второй. Это мой код:

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 Ответ

1 голос
/ 05 апреля 2019

Может кто-нибудь объяснить, почему, пожалуйста?

Неопределенное поведение (UB)

for(int j = 0; b[j] !='\0'; j++) пытается получить доступ к char b[4] за его 4-мя элементами. Результат UB. Все может случиться.


Если код для обработки char b[] как строка (массив с нулевым символом ), позволяет компилятору создать необходимый размер массива

// char b[4] = "oabq";
char b[] = "oabq";  // now `b[]` has 5 ellements
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...