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

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

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

Вообщем есть задача считать файл в функции init(), а массивы строк получившиеся в итоге объявить так чтоб они были доступны глобально.
Листинг программы
  1. void init ()
  2. {
  3. size_t stringf;
  4. FILE *file_name;
  5. stringf=0;
  6. file_name = fopen ("/home/test.txt","r");
  7. while(fscanf(file_name, "%*[^\n]%*c") != EOF)
  8. stringf++;
  9. char text_array[(stringf+1)][128];
  10. file_name = freopen ("/home/test.txt","r",file_name);
  11. do {
  12. stringf--;
  13. fgets ((text_array[stringf]),128,file_name);
  14. }while (stringf != 0);
  15. fclose (file_name);
  16. }
  17. int main()
  18. {
  19. init();
  20. printf ("%s",text_array[0]);
  21. return 0;
  22. }
Как объявить глобально text_array я ума не приложу, помогите пожалуйста.

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

textual
Листинг программы
  1. #include <stdlib.h>
  2.  
  3. char** allocate_text_array(size_t nString)
  4. {
  5.     char **text_array;
  6.     text_array = malloc( nString * sizeof(char*) );
  7.  
  8.     for (size_t i = 0; i < nString; i++)
  9.         text_array[i] = malloc(128*sizeof(char));
  10.  
  11.     return text_array;
  12. }
  13.  
  14. void free_text_array(char **text_array)
  15. {
  16.     for (size_t i = 0; i < nString; i++)
  17.         free(text_array[i]);
  18.     free(text_array);
  19. }
  20.  
  21. int main()
  22. {
  23.     size_t nString;
  24.  
  25.     // читаем nString из файла
  26.  
  27.     // выделяем память под двумерный массив
  28.     char **text_array = allocate_text_array(nString);
  29.  
  30.     // работаем с массивом text_array
  31.     some_function_that_use_text_array(text_array, nString);
  32.  
  33.     // освобождаем память
  34.     free_text_array(text_array);
  35. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы