Пошагово программа выполняется правильно, выдает ошибку Run-Time Check Failure #2 - Stack around the variable 'x' was corrupted.Что не так
введите сюда код
#include <stdio.h>
int main()
{
int q, w, i, i3, i7;
long int k;
char z[]="000000" , x[]="000", b[]="000000", v[]="000" ;
const long int c = 10000;
long int a[c]; int z3[100]; int z7[100];
a[0] = 1000;
k = 0;
for (k = 1; k < 2000; k++)
{
a[k] = a[0] + 1 * k;
i3 = 0; q = a[k];
do
{
z3[i3] = q - (q / 3) * 3;
z[i3] = z3[i3]+'0';
q = q / 3;
i3++;
} while (q != 0);
i3 = i3 - 1;
for (i = i3; i >= 0; i--)
b[i3-i] = z[i];
i7 = 0; w = a[k];
do
{
z7[i7] = w - (w / 7) * 7;
x[i7] = z7[i7] + '0';
w = w / 7;
i7++;
} while (w != 0);
i7 = i7 - 1;
for (i = i7; i >= 0; i--)
{
v[i7 - i] = x[i];
}
if ((x == v) && (z == b))
printf("\n%d", a[k]);
}
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Что именно не так - это вы решайте сами, вы не написали, что хотите от своей программы. А вот простейшее добавление assert'ов типа
assert(i3 >=0 && i3 < 100);
z3[i3] = q - (q / 3) * 3;
или
for (i = i3; i >= 0; i--)
assert(i3-i >=0 && i3-i < 7);
assert(i >=0 && i < 100);
b[i3-i] = z[i];
сразу показывает, что в строке
b[i3-i] = z[i];
у вас i меньше нуля. Почему - разбирайтесь сами, что вы делаете в программе... Результат - выход за пределы массива, UB, испорченный стек...
И еще - абсолютно бессмысленное сравнение
if ((x == v) && (z == b))
Это же разные массивы, значит, и адреса у них будут разные, так что это условие никогда не будет выполнено. Строки сравнивают с помощью функций типа strcmp...