C-инициализация глобального массива в функции
у меня есть массив, который я хочу сделать глобальным, и я хочу инициализировать вызов функции. Я хочу сначала объявить его, не зная его размера:
char str[];
и потом инициализировать его:
str = char[size];
Как я могу это сделать? Я очень новичок в c, и, возможно, я иду совершенно неправильно здесь, любая помощь была бы очень признательна.
4 ответов
способ сделать это с malloc
. Сначала объявите только указатель:
char *str;
тогда в функции init вы malloc
это:
str = malloc(sizeof(*str) * size_of_array);
выделяет size_of_array
элементы размера, которые str
точек (char
в данном случае).
вы должны проверить, если выделение не удалось:
if (str == NULL) {
// allocation failed
// handle the error
}
обычно вы должны убедиться, что вы free
это выделенная память, когда вы закончите с ним. Однако, в данном случае str
глобальная, поэтому он никогда не выходит за рамки, и память будет free
D, когда программа заканчивается.
сделайте объявление глобального массива следующим образом:
char *str = NULL;
затем в вашей функции инициализации сделайте что-то вроде этого:
void init(int size)
{
...
str = malloc(size * sizeof(char));
...
}
char* str;
str = (char*)malloc(size*sizeof(char));
вы можете пропустить *sizeof(char)
С sizeof(char) == 1
по определению.
Не забудьте освободить память с помощью free
создать char* str;
вместо массива. Затем выделите необходимый объем памяти с помощью malloc или calloc и выполните инициализацию в самом вызове функции.