Как выделить память под массив структур? - C (СИ)
Формулировка задачи:
Привет всем! Помогите, не знаю как выделить память под массив структур.
#include <conio.h> #include <stdio.h> #include <string.h> #include <stdlib.h> /*1) створіть структуру Club з полями: name - назва клубу; city - місто, яке він представляє; score - кількість набраних очок;*/ struct Club { char cCity[255]; char cName[255]; char cScore[255]; }; int main(void) { struct Club sClub; signed int i; for ( i = 0; i < 255; i++ ) { sClub.cCity[i] = 0; sClub.cName[i] = 0; sClub.cScore[i] = 0; } /* 2) створіть файл, в якій внесіть дані - майбутні значення полів структури Club (кожне поле - з нового рядка, без пробілів!), кількість клубів - не менше 10 (розташувати у файлі в довільному порядку, не залежно від кількості очок);*/ FILE *pClub; pClub = fopen ( "FileAllClubs.txt", "a+" ); //3) збережіть створений файл як текстовий; printf ( "Input name city: " ); gets ( sClub.cCity ); printf ( "Input name club: " ); gets ( sClub.cName ); printf ( "Input score club: " ); gets ( sClub.cScore ); fprintf( pClub, "%s\n%s\n%s\n", &sClub.cCity[0], &sClub.cName[0], &sClub.cScore[0] ); fclose ( pClub ); for ( i = 0; i < 255; i++) { sClub.cCity[i] = 0; sClub.cName[i] = 0; sClub.cScore[i] = 0; } pClub = fopen ( "FileAllClubs.txt", "r+" ); fgets (sClub.cCity, 255, pClub); fgets (sClub.cName, 255, pClub); fgets (sClub.cScore, 255, pClub); fclose ( pClub ); puts(sClub.cCity); puts(sClub.cName); puts(sClub.cScore); /*4) введіть з клавіатури число n - кількість клубів, дані про які потрібно прочитати з файлу;*/ signed int N = 0; printf ( "Input N: " ); scanf ( "%d", &N ); struct Club *p; if((p = malloc(sizeof(struct addr))) == NULL) { printf("ERROR\n"); exit(1); } for ( i = 0; i < N; i++ ) { } pClub = fopen ( "FileAllClubs.txt", "r+b" ); fclose ( pClub ); //5) виділіть динамічно пам’ять для масиву з n структур; //6) прочитайте у відповідний масив максимально можливу кількість даних про клуби; /* 7) здійснить сортування даного масиву за спаданням кількості очок клубів - першим елементом щоб стала структура, клуб якої має максимальну кількість очок, і далі - в порядку зменшення; Примітка: - з метою обміну структур місцями оголосіть додаткову аналогічну структуру, в яку тимчасово будете копіювати ті, що підлягають перестановці; •доступ до елементів масиву структур здійснюйте за допомогою покажчиків! */ //8) дані відсортованого масиву виведіть до іншого текстового файлу (по можливості використовуючи форматування для кращої читабельності); перевірте файл на предмет правильного порядку розташування в ньому даних про клуби. return 0; }
Решение задачи: «Как выделить память под массив структур?»
textual
Листинг программы
struct Club *aArrayClub; if ((aArrayClub = (struct Club*) malloc(N * sizeof(struct Club))) == NULL) { printf("ERROR\n"); exit(1); } for (i = 0; i < N; i++) { strcpy(aArrayClub[i].cCity, sClub.cCity); strcpy(aArrayClub[i].cName, sClub.cName); strcpy(aArrayClub[i].cScore, sClub.cScore); }
Объяснение кода листинга программы
В данном коде происходит выделение памяти под массив структур типа Club. Структура Club содержит три поля: cCity, cName и cScore, которые являются строками.
- Создается указатель на структуру Club, называемый aArrayClub.
- С помощью функции malloc() выделяется память под массив структур Club, где N - количество структур.
- Если выделение памяти не удалось (получен NULL), то выводится сообщение об ошибке и программа завершается.
- Если выделение памяти прошло успешно, то начинается цикл for, который выполняется N раз.
- Внутри цикла поля каждой структуры массива aArrayClub заполняются значениями полей структуры sClub.
- После завершения цикла все выделенные структуры будут содержать копии полей структуры sClub.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д