c语言 - 在数组中移动值后,要插入的位置"K"的值变为 0



在使用C的数组插入程序中,当将数组中的值从一个位置移动到另一个位置时,'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 insertingn");
for (i = 0; i < n; i++) {
printf("nList = a[%d] = %d", i, a[i]);
}
}

我得到的输出:

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',它会正常工作并给出正确的输出。我得到了一个答案,这是一个缓冲区溢出,但我仍然不明白为什么会发生这种情况。

我试图在数组初始化之前设置'k'的初始化,程序给出了

的输出
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(数组声明的大小)的任何位置会导致缓冲区溢出,因为没有足够的内存分配。

一种修复方法是执行a[j] = a[j - 1];并声明j = 5。另一个修复方法是执行a[j + 1] = a[j];并声明j = 4

最新更新