Передача динамического массива как аргумент функции - 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- указатель на переменную, в которую будет записан размер массива.
- Возврат в вызывающую функцию:
- После выполнения всех действий функция возвращает управление в вызывающую функцию.