通过超过数组的限制来重新分配数组的大小

时间:2019-12-24 13:55:17

标签: c arrays malloc realloc

我无法解决问题。该程序必须根据用户的需求来增加数组的大小。但是,它将跳过条件并开始显示数组本身。

int main() {
    int *ptr;
    int limit;
    int sum = 0;
    int ans;

    printf("enter the limit of the array\n");
    scanf_s("%d", &limit);
    ptr = (int *)malloc(limit * sizeof(int));
    for (int i = 0; i < limit; i++) {
        printf("enter element %d : ", i + 1);
        scanf_s("%d", (ptr + i));
        if (i = limit) {
            printf("do you want to stop entering?\n");
            printf("\t\t1\t0\n");
            if (scanf_s("%d", &ans) == '1') {
                break;
            } else
            if (scanf_s("%d", &ans) == '0') {
                limit += 5;
                ptr = (int *)realloc(ptr, limit * sizeof(int));
                printf("memory re-allocation is completed succesfully!\n");
            }
        }
    }
    for (int i = 0; i < limit; i++) {
        printf("\nthis is your %d. element : %d\n", i + 1, *(ptr + i));
    }
    return EXIT_SUCCESS;
}

1 个答案:

答案 0 :(得分:2)

您的代码中的if语句:

if (i = limit)

不将ilimit进行比较。而是将limit的值分配给i,然后检查此表达式的结果是否为非零。如果是,则输入该块,否则将被跳过。

=是分配运算符。使用相等运算符==比较两个操作数。

if (i == limit)