Передача динамического массива как аргумент функции - C (СИ)
Формулировка задачи:
Вот кусок кода. Если разкомментировать вывод элементов массива на экран в main, то происходит ошибка сегментирования. Из-за того, что я неправильно передаю массив функции и он не изменился на самом деле и мы выходим за его границы? Как тогда правильно передавать динамический массив (он же сам по себе уже указатель)? Или в чем дело, подскажите пожалуйста.
Пытался изменить объявление на
и передавать
но запутался в дальнейшем.
void readFile(const char* file, int ** array, int * size)
readFile(inputFile, &array, &size);
#include <stdio.h> #include <stdlib.h> void readFile(const char* file, int * array, int * size) { FILE* f = fopen(file, "rt"); if (!f) { printf("Error! Can not open source file!\nExit!\n"); exit(EXIT_FAILURE); } *size = 0; while ( !feof(f)) { if (fgetc(f) == '\n') (*size)++; } array = (int * )malloc((*size) * sizeof(int)); rewind(f); int i = 0; for (; i < *size; ++i) { fscanf(f, "%d", &array[i]); } fclose(f); } int main(int argc, char **argv) { if (argc < 4) { printf("Error! Not enought of arguments!\nExit!\n"); exit(EXIT_FAILURE); } if (argc > 4) { printf("Error! Too many arguments!\nExit!\n"); exit(EXIT_FAILURE); } const char* inputFile = argv[1]; const char* outputFile = argv[2]; int * array /*= NULL*/; int size = 0; readFile(inputFile, array, &size); /*int i=0; for (; i < size; ++i) { printf("%d%s",array[i],"\n"); }*/ }
Решение задачи: «Передача динамического массива как аргумент функции»
textual
Листинг программы
void readFile(const char* file, int ** array, int * size); и void readFile(const char* file, int * array, int * size) {
Объяснение кода листинга программы
В данном коде представлена функция с именем readFile
, которая считывает файл и заполняет массив целыми числами. Она принимает три аргумента:
file
- указатель на строку, содержащую имя файла, который нужно считать.array
- указатель на массив, который будет заполнен считанными из файла числами.size
- указатель на переменную, в которую будет записан размер массива. Список действий, выполняемых в функцииreadFile
:- Создание и инициализация переменных:
file
-имя_файла
array
- указатель на массивsize
- указатель на переменную
- Открытие файла для чтения:
file
-имя_файла
- Проверка успешности открытия файла:
- Если файл не удалось открыть, то выводится сообщение об ошибке и программа завершается.
- Считывание данных из файла:
- Чтение чисел из файла и запись их в массив
array
.
- Чтение чисел из файла и запись их в массив
- Закрытие файла:
- Закрытие файла после его чтения.
- Вычисление размера массива
array
:- Размер массива
array
равен количеству считанных чисел.
- Размер массива
- Запись размера массива в переменную
size
:size
- указатель на переменную, в которую будет записан размер массива.
- Возврат в вызывающую функцию:
- После выполнения всех действий функция возвращает управление в вызывающую функцию.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д