Глобальный динамический двумерный массив - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Вообщем есть задача считать файл в функции init(), а массивы строк получившиеся в итоге объявить так чтоб они были доступны глобально.
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;
}
Как объявить глобально text_array я ума не приложу, помогите пожалуйста.

Решение задачи: «Глобальный динамический двумерный массив»

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);
}

Объяснение кода листинга программы

  1. В функции allocate_text_array мы объявляем двумерный массив text_array типа char* и выделяем память под него с помощью функции malloc.
  2. Затем мы проходим циклом по всем строкам массива и выделяем память под каждую строку с помощью функции malloc.
  3. В функции free_text_array мы освобождаем память, сначала пройдя циклом по всем строкам массива и освободив память с помощью функции free, а затем освобождаем память под самим массивом text_array.
  4. В функции main мы объявляем переменную nString, которая представляет собой количество строк в нашем массиве.
  5. Мы считываем значение nString из файла.
  6. Затем мы выделяем память под двумерный массив text_array с помощью функции allocate_text_array.
  7. Мы выполняем некоторую функцию some_function_that_use_text_array, которая работает с массивом text_array.
  8. После того, как мы закончили работу с массивом, мы освобождаем память с помощью функции free_text_array.

Оцени полезность:

9   голосов , оценка 4.333 из 5
Похожие ответы