Ошибка Stack around the variable was corrupted C++

Задание:

Заданы две строки. Построить новую строку, состоящую из символов, которые входят в первую строку, но не входят во вторую.

Моя реализация: (не кидайте палки я новичок в С++ и ещё учусь поэтому очень много ещё не знаю)

char string1[] = "qwerty";
char string2[] = "qasdrty";
char string3[20];
for (int j = 0; j < sizeof(string3); j++)
{
    for (int i = 0; i < sizeof(string1); i++)
    {
        char temp;
        for (int k = 0; k < sizeof(string2); k++)
        {
            if (string1[i] != string2[k])
            {
                temp = string1[i];
            }
            else
            {
                temp = 0;
                break;
            }
        }

        string3[j] = temp;
        if (string3[j] != 0)
        {
            j++;
        }
    }
}
cout << string3 << endl;

Так-то в консоли оно пишет правильный ответ, то есть в данном случае: we. А потом сразу выбивает ошибку:

Stack around the variable was corrupted

Помогите разобраться, и возможно есть какой-то вариант отключить данную ошибку?


Ответы (1 шт):

Автор решения: nevilad

Проблема в том, что в блоке

if (string3[j] != 0)
{
    j++;
}

j увеличивается, но проверки на достижение предельного значения нет. Добавив ее проблема уйдет:

if (string3[j] != 0)
{
    j++;
    if (j >= sizeof(string3))
        break;
}

Однако истинная проблема в том, что алгоритм, который судя по вопросу должен вывести "we", т.е. записать в строку 3 символа (2 буквы и завершающий ноль), записывает эти символы многократно, переполняя строку в 20 символов. Это легко увидеть в отладке посмотрев содержимое переменной string3 прямо перед ее выводом. Там будет записано "we\0we\0we\0we\0we\0we\0we\0". Так что полноценное решение - переписать алгоритм.

→ Ссылка