Возникли проблемы при добавлении элементов в массив и печати их - PullRequest
1 голос
/ 18 апреля 2019

Я пытаюсь создать массив, размер которого зависит от количества элементов ввода. После этого я хочу напечатать его, но получаю очень странные результаты.

int main(void)
{
    int input_arr;
    int i,size=0;
    int arr[size];

    while(input_arr!=-1){
        printf("enter positive int");
        scanf("%d",&input_arr);

        arr[size]=input_arr;
        printf("%d",arr[size]);

        for(i=0;arr[i]!='\0';i++){
            printf("%d ",arr[i]);
        }

        size+=1;
    }
    return 0;
}

33 3 3 3 3 3 6487488 enter positive int3.

Это дает вывод, как это, и через некоторое время он перестает принимать элементы. Я не мог понять, где я делаю неправильно.

1 Ответ

2 голосов
/ 18 апреля 2019

В C размер массива фиксируется в тот момент, когда вы его определяете.Увеличение переменной size не увеличивает размер массива.Поэтому вы сразу получаете переполнение буфера в тот момент, когда вы читаете первый элемент.Вместо этого вы можете объявить большой массив следующим образом:

static const int maxSize = 4096;
int arr[maxSize];

int main(void)
{
    int i, size=0;

    while(size < maxSize){
        printf("enter positive int");
        scanf("%d", &arr[size]);
        ++size;

        for(i=0; i < size; i++){
            printf("%d ",arr[i]);
        }
        printf("\n");
    }
    return 0;
}

В качестве альтернативы вы можете использовать malloc и realloc для динамического увеличения массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...