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

  1. file - указатель на строку, содержащую имя файла, который нужно считать.
  2. array - указатель на массив, который будет заполнен считанными из файла числами.
  3. size - указатель на переменную, в которую будет записан размер массива. Список действий, выполняемых в функции readFile:
  4. Создание и инициализация переменных:
    • file - имя_файла
    • array - указатель на массив
    • size - указатель на переменную
  5. Открытие файла для чтения:
    • file - имя_файла
  6. Проверка успешности открытия файла:
    • Если файл не удалось открыть, то выводится сообщение об ошибке и программа завершается.
  7. Считывание данных из файла:
    • Чтение чисел из файла и запись их в массив array.
  8. Закрытие файла:
    • Закрытие файла после его чтения.
  9. Вычисление размера массива array:
    • Размер массива array равен количеству считанных чисел.
  10. Запись размера массива в переменную size:
    • size - указатель на переменную, в которую будет записан размер массива.
  11. Возврат в вызывающую функцию:
    • После выполнения всех действий функция возвращает управление в вызывающую функцию.

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


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

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

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