Ошибка 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 шт):
Проблема в том, что в блоке
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". Так что полноценное решение - переписать алгоритм.