[英]The value of 'K' the position to insert changes to 0 after shifting value in array
在使用 C 的数组插入程序中,当将数组中的一个 position 的值移动到另一个时,'k' 的值变为零。 我使用 windows 10,代码块,也直接用 MinGw gcc 试了一下,还是报同样的错误
我的代码:
#include <stdio.h>
int main() {
int a[6] = {100,200,300,400,500};
int item = 600, n = 5;
int i = 0, j = 5, k = 3;
for (i = 0; i < n; i++) {
printf("\nArray = a[%d] = %d", i, a[i]);
}
n = n + 1;
printf("\nThe position value before loop: %d", k);
while (j >= k) {
printf("\nThe position value in (%d) loop: %d", j, k);
a[j + 1] = a[j];
j = j - 1;
}
printf("\nThe position value after loop: %d", k);
a[k] = item;
printf("\nThe array after inserting\n");
for (i = 0; i < n; i++) {
printf("\nList = a[%d] = %d", i, a[i]);
}
}
我得到的output:
Array = a[1] = 200
Array = a[2] = 300
Array = a[3] = 400
Array = a[4] = 500
The position value before loop: 3
The position value in (5) loop: 3
The position value in (4) loop: 0
The position value in (3) loop: 0
The position value in (2) loop: 0
The position value in (1) loop: 0
The position value in (0) loop: 0
The position value after loop: 0
The array after inserting
List = a[0] = 600
List = a[1] = 100
List = a[2] = 200
List = a[3] = 300
List = a[4] = 400
List = a[5] = 500
但是,如果我将数组“a”的大小设置为“7”,它可以正常工作并给出正确的 output。 我得到的答复是缓冲区溢出,但我仍然不明白为什么会这样。
我试图在数组初始化之前设置 'k' 的初始化,程序给出了 output
Array = a[0] = 100
Array = a[1] = 200
Array = a[2] = 300
Array = a[3] = 400
Array = a[4] = 500
The position value before loop: 3
The position value in (5) loop: 3
The position value in (4) loop: 3
The position value in (3) loop: 3
The position value after loop: 3
The array after inserting
当你做a[j + 1] = a[j];
您第一次尝试访问 a[6] (j = 5),这导致缓冲区溢出。 您必须记住,数组的第一个元素是 a[0],您可以访问的最后一个元素是 a[5]。 尝试访问数组中大于或等于 6(数组声明的大小)的任何 position 会导致缓冲区溢出,因为没有分配足够的 memory。
一种解决方法是执行a[j] = a[j - 1];
并声明j = 5
。 其他解决方法是做a[j + 1] = a[j];
并声明j = 4
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.