Запись в файл при быстром выделении памяти - 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));
Объяснение кода листинга программы
- В начале кода происходит выделение памяти для двумерного массива (массива указателей на массивы). Для этого используется функция calloc, которая выделяет память для заданного количества элементов (ROWS) указателей на массивы (sizeof(int)), а также для каждого из этих массивов (COLUMNSROWS элементов) с типом данных int.
- Затем, используя оператор *, полученный указатель на первый элемент массива (массив указателей на массивы) приводится к типу char**.
- Далее, используя оператор * и квадратные скобки, происходит запись в файл при быстром выделении памяти.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д