C - Инициализация глобального массива в функции - PullRequest
7 голосов
/ 22 ноября 2010

У меня есть массив, который я хочу сделать глобальным, и я хочу инициализировать при вызове функции.Я хочу сначала объявить его, не зная его размера:

char str[];

, а затем инициализировать его:

str = char[size];

Как я могу это сделать?Я очень плохо знаком с c и, возможно, я иду совершенно не туда, любая помощь будет принята с благодарностью.

Ответы [ 4 ]

9 голосов
/ 22 ноября 2010

Способ сделать это с 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, когда программа завершится.

2 голосов
/ 22 ноября 2010

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

char *str = NULL;

Затем в вашей функции инициализации сделайте что-то вроде этого:

void init(int size)
{
    ...
    str = malloc(size * sizeof(char));
    ...
}
1 голос
/ 22 ноября 2010

Создайте char* str; вместо массива. Затем выделите необходимый объем памяти с помощью malloc или calloc и выполните инициализацию в самом вызове функции.

1 голос
/ 22 ноября 2010
char* str;

str = (char*)malloc(size*sizeof(char));

Вы можете пропустить *sizeof(char), начиная с sizeof(char) == 1 по определению.

Не забудьте освободить память, используя free

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