繁体   English   中英

将数组中的值移动后,要插入的 position 的“K”值变为 0

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM