Запись в файл при быстром выделении памяти - C (СИ)

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

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

Частичная задача программы заключается в записи в файл двухмерного массива символов.
char **mass = (char **)calloc(ROWS,sizeof(int*));
    *mass = (char *)calloc(COLUMNS*ROWS,sizeof(int));
    for(i = 1; i < COLUMNS; i++) 
    {
        *(mass+i) = *mass +i*ROWS;;
    }
Запись проводится следующим образом:
for(i = 0; i < COLUMNS; ++i)
    {
        fread(mass[i],sizeof(char),ROWS,out);
        fwrite(mass[i],sizeof(char),ROWS,in);
    }
Я обнаружил, что значения массива можно вывести с помощью одного выражения без цикла:
fputs(mass[0], stdout);
Но мне осталось непонятным, почему, в случае, если я применяю для вывода значений цикл:
for(i = 0; i < COLUMNS; ++i)
    {
        fputs(mass[i], stdout);
    }
у меня отображаются на экране двухмерные массивы, каждый последующий из которых имеет на одну строку меньше. Я понимаю, что нулевой элемент должен содержать память на все элементы массива. Но не понимаю, каким образом в нулевой элемент попали все элементы массива, ведь в нулевой элемент массива я записал лишь одну строку:
fread(mass[i],sizeof(char),ROWS,out);

Решение задачи: «Запись в файл при быстром выделении памяти»

textual
Листинг программы
char **mass = (char **)calloc(ROWS,sizeof(int*));
*mass = (char *)calloc(COLUMNS*ROWS,sizeof(int));

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

  1. В начале кода происходит выделение памяти для двумерного массива (массива указателей на массивы). Для этого используется функция calloc, которая выделяет память для заданного количества элементов (ROWS) указателей на массивы (sizeof(int)), а также для каждого из этих массивов (COLUMNSROWS элементов) с типом данных int.
  2. Затем, используя оператор *, полученный указатель на первый элемент массива (массив указателей на массивы) приводится к типу char**.
  3. Далее, используя оператор * и квадратные скобки, происходит запись в файл при быстром выделении памяти.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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