Как выделить память под массив структур? - C (СИ)

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

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

Привет всем! Помогите, не знаю как выделить память под массив структур.
Листинг программы
  1. #include <conio.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. /*1) створіть структуру Club з полями: name - назва клубу; city - місто, яке він представляє;
  6. score - кількість набраних очок;*/
  7. struct Club
  8. {
  9. char cCity[255];
  10. char cName[255];
  11. char cScore[255];
  12. };
  13. int main(void)
  14. {
  15. struct Club sClub;
  16. signed int i;
  17. for ( i = 0; i < 255; i++ )
  18. {
  19. sClub.cCity[i] = 0;
  20. sClub.cName[i] = 0;
  21. sClub.cScore[i] = 0;
  22. }
  23. /* 2) створіть файл, в якій внесіть дані - майбутні значення полів структури Club
  24. (кожне поле - з нового рядка, без пробілів!), кількість клубів - не менше 10
  25. (розташувати у файлі в довільному порядку, не залежно від кількості очок);*/
  26. FILE *pClub;
  27. pClub = fopen ( "FileAllClubs.txt", "a+" ); //3) збережіть створений файл як текстовий;
  28. printf ( "Input name city: " );
  29. gets ( sClub.cCity );
  30. printf ( "Input name club: " );
  31. gets ( sClub.cName );
  32. printf ( "Input score club: " );
  33. gets ( sClub.cScore );
  34. fprintf( pClub, "%s\n%s\n%s\n", &sClub.cCity[0], &sClub.cName[0], &sClub.cScore[0] );
  35. fclose ( pClub );
  36. for ( i = 0; i < 255; i++)
  37. {
  38. sClub.cCity[i] = 0;
  39. sClub.cName[i] = 0;
  40. sClub.cScore[i] = 0;
  41. }
  42. pClub = fopen ( "FileAllClubs.txt", "r+" );
  43. fgets (sClub.cCity, 255, pClub);
  44. fgets (sClub.cName, 255, pClub);
  45. fgets (sClub.cScore, 255, pClub);
  46. fclose ( pClub );
  47. puts(sClub.cCity);
  48. puts(sClub.cName);
  49. puts(sClub.cScore);
  50. /*4) введіть з клавіатури число n - кількість клубів,
  51. дані про які потрібно прочитати з файлу;*/
  52.  
  53. signed int N = 0;
  54. printf ( "Input N: " );
  55. scanf ( "%d", &N );
  56. struct Club *p;
  57. if((p = malloc(sizeof(struct addr))) == NULL) {
  58. printf("ERROR\n");
  59. exit(1);
  60. }
  61.  
  62. for ( i = 0; i < N; i++ )
  63. {
  64. }
  65. pClub = fopen ( "FileAllClubs.txt", "r+b" );
  66. fclose ( pClub );
  67. //5) виділіть динамічно пам’ять для масиву з n структур;
  68. //6) прочитайте у відповідний масив максимально можливу кількість даних про клуби;
  69. /*
  70. 7) здійснить сортування даного масиву за спаданням кількості очок клубів - першим елементом щоб стала структура, клуб якої має максимальну кількість очок, і далі - в порядку зменшення;
  71. Примітка: - з метою обміну структур місцями оголосіть додаткову аналогічну структуру, в яку тимчасово будете копіювати ті, що підлягають перестановці;
  72. •доступ до елементів масиву структур здійснюйте за допомогою покажчиків!
  73. */
  74. //8) дані відсортованого масиву виведіть до іншого текстового файлу (по можливості використовуючи форматування для кращої читабельності); перевірте файл на предмет правильного порядку розташування в ньому даних про клуби.
  75.  
  76. return 0;
  77. }

Решение задачи: «Как выделить память под массив структур?»

textual
Листинг программы
  1. struct Club *aArrayClub;
  2.  
  3.     if ((aArrayClub = (struct Club*) malloc(N * sizeof(struct Club))) == NULL)
  4.     {
  5.         printf("ERROR\n");
  6.         exit(1);
  7.     }
  8.  
  9.     for (i = 0; i < N; i++)
  10.     {
  11.         strcpy(aArrayClub[i].cCity, sClub.cCity);
  12.         strcpy(aArrayClub[i].cName, sClub.cName);
  13.         strcpy(aArrayClub[i].cScore, sClub.cScore);
  14.  
  15.     }

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

В данном коде происходит выделение памяти под массив структур типа Club. Структура Club содержит три поля: cCity, cName и cScore, которые являются строками.

  1. Создается указатель на структуру Club, называемый aArrayClub.
  2. С помощью функции malloc() выделяется память под массив структур Club, где N - количество структур.
  3. Если выделение памяти не удалось (получен NULL), то выводится сообщение об ошибке и программа завершается.
  4. Если выделение памяти прошло успешно, то начинается цикл for, который выполняется N раз.
  5. Внутри цикла поля каждой структуры массива aArrayClub заполняются значениями полей структуры sClub.
  6. После завершения цикла все выделенные структуры будут содержать копии полей структуры sClub.

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


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

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

10   голосов , оценка 3.9 из 5

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

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

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