У меня возникла проблема с написанием очень простой программы для изучения массивов на C. Сообщение появляется, когда размер массива превышает 2. SO: Linux, Clear Linux OS 64 бита
#include <stdio.h>
int main (void) {
int array[0], k=0, init;
printf ("Insert amount of values\n");
scanf ("%i", &init);
for (k=1; k<=init; k++) {
printf ("Insert values:");
scanf ("%i", &array[k]);
}
for (k=1; k<=init; k++) {
printf("%i,", array[k]);
}
return 0;
}
Insert amount of values
3
Insert values:4
Insert values:2
Insert values:3
Segmentation fault (core dumped)
Пробовал изменить тип данных массива и "%i"
на "%d"
вы объявили array
длину 0
, она не изменяется автоматически
Массивы в C не являются динамическими.
Также помните, что индексы массива отсчитываются от нуля. Таким образом, массив из init
элементов будет иметь индексы от 0
до init - 1
(включительно).
Возможно, вы захотите держаться подальше от %i
, так как это может иметь непредвиденные последствия. %d
здесь условность.
@tadman и CoffeeTableEspresso Я инициализировал его с 0, это неправильно?
@ Эрнан, да. Когда вы создаете массив в C, его размер фиксирован. Поэтому, если вы создадите массив нулевой длины, вы не сможете хранить в нем более 0 элементов.
Вы инициализируете массив размером 1 с помощью int array[0]
.
У вас есть два варианта:
Вы объявляете массив с наибольшим ожидаемым размером для примера int array[10]
, но вы просто сообщаете о своей проблеме и получаете segfault при введенном 11-м значении.
Вы динамически управляете размером своих массивов с помощью функции malloc
.
Примечание: sizeof(array) == 0
, а не 1
.
Подсказка: сколько значений можно хранить в массиве нулевой длины?