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 глобальная, поэтому он никогда не выходит за рамки, и память будет freeD, когда программа заканчивается.


сделайте объявление глобального массива следующим образом:

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 и выполните инициализацию в самом вызове функции.