Глобальный динамический двумерный массив - C (СИ)
Формулировка задачи:
Вообщем есть задача считать файл в функции init(), а массивы строк получившиеся в итоге объявить так чтоб они были доступны глобально.
Как объявить глобально text_array я ума не приложу, помогите пожалуйста.
Листинг программы
- void init ()
- {
- size_t stringf;
- FILE *file_name;
- stringf=0;
- file_name = fopen ("/home/test.txt","r");
- while(fscanf(file_name, "%*[^\n]%*c") != EOF)
- stringf++;
- char text_array[(stringf+1)][128];
- file_name = freopen ("/home/test.txt","r",file_name);
- do {
- stringf--;
- fgets ((text_array[stringf]),128,file_name);
- }while (stringf != 0);
- fclose (file_name);
- }
- int main()
- {
- init();
- printf ("%s",text_array[0]);
- return 0;
- }
Решение задачи: «Глобальный динамический двумерный массив»
textual
Листинг программы
- #include <stdlib.h>
- char** allocate_text_array(size_t nString)
- {
- char **text_array;
- text_array = malloc( nString * sizeof(char*) );
- for (size_t i = 0; i < nString; i++)
- text_array[i] = malloc(128*sizeof(char));
- return text_array;
- }
- void free_text_array(char **text_array)
- {
- for (size_t i = 0; i < nString; i++)
- free(text_array[i]);
- free(text_array);
- }
- int main()
- {
- size_t nString;
- // читаем nString из файла
- // выделяем память под двумерный массив
- char **text_array = allocate_text_array(nString);
- // работаем с массивом text_array
- some_function_that_use_text_array(text_array, nString);
- // освобождаем память
- free_text_array(text_array);
- }
Объяснение кода листинга программы
- В функции
allocate_text_array
мы объявляем двумерный массивtext_array
типаchar*
и выделяем память под него с помощью функцииmalloc
. - Затем мы проходим циклом по всем строкам массива и выделяем память под каждую строку с помощью функции
malloc
. - В функции
free_text_array
мы освобождаем память, сначала пройдя циклом по всем строкам массива и освободив память с помощью функцииfree
, а затем освобождаем память под самим массивомtext_array
. - В функции
main
мы объявляем переменнуюnString
, которая представляет собой количество строк в нашем массиве. - Мы считываем значение
nString
из файла. - Затем мы выделяем память под двумерный массив
text_array
с помощью функцииallocate_text_array
. - Мы выполняем некоторую функцию
some_function_that_use_text_array
, которая работает с массивомtext_array
. - После того, как мы закончили работу с массивом, мы освобождаем память с помощью функции
free_text_array
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д