Передача массива структуры в функцию - C (СИ)

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

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

Добрый вечер! У меня такая проблема. Необходимо создать функцию, которая "обнуляет" все значения в полях структуры. Структура такая:
Листинг программы
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #define SIZE 30
  4. typedef struct
  5. {
  6. char family[255];
  7. char name[255];
  8. char books[255];
  9. char hobby[255];
  10. int mark[5];
  11. int group[5];
  12. } TStudent;
Прототип функции:
Листинг программы
  1. void erasedata(TStudent*[],int,int);
Объявление массива структуры и массива указателей на неё:
Листинг программы
  1. TStudent a[SIZE],*p[SIZE];
  2. for (i=0;i<=29;i++)
  3. {
  4. p[i]=&a[i];
  5. }
Вызов функции в main е:
Листинг программы
  1. erasedata(p,SIZE,m)
Сама функция:
Листинг программы
  1. void erasedata (TStudent* p[], int size, int n)
  2. {
  3. FILE *f;
  4. int i;
  5. (p[n])->family="";(p[n])->name="";(p[n])->books="";(p[n])->hobby="";
  6. (p[n])->mark=0;(p[n])->group=0;
  7. f=fopen("filezk.dat","w");
  8. fseek(f,n*sizeof(TStudent),SEEK_SET);
  9. fwrite(p,sizeof(TStudent),1,f);
  10. fclose(f);
  11. }
На строку, где производится присвоение "пустых" значений полям структуры компилятор "ругается" Lvalue required. Пробовал не создавать массив указателей, а передавать параметры таким образом: erasedata(a,SIZE,n); Результат тот же, только в строке вызова функции добавляется предупреждение: suspicious pointer conversion. Подскажите пожалуйста, где я ошибаюсь? Как правильно передать массив структуры в функцию?

Решение задачи: «Передача массива структуры в функцию»

textual
Листинг программы
  1.  (p[n])->family[0] = '\0';

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

В данном коде выполняется следующая последовательность действий:

  1. Переменная n инициализируется значением 0.
  2. Указатель p указывает на начало массива структур.
  3. (p[n])->family[0] - это доступ к элементу массива структур по индексу n, который содержит указатель на массив строк.
  4. Значение '\0' присваивается элементу массива, на который указывает (p[n])->family[0].
  5. Значение '\0' является специальным символом, который используется для обозначения конца строки в C.
  6. Таким образом, в результате выполнения данного кода, в массиве структур будет установлен указатель на пустую строку (которая будет иметь длину 0) для определенного элемента массива структур.

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


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

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

6   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы