Глобальный динамический двумерный массив - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д