Не получается создать массив структур через указатели
Не получается создать массив структур через указатели. Если создать массивы глобальными - то всё работает, а я хочу научиться передавать массивы из одной функции в другую.
#include <stdlib.h>
#include <stdio.h>
struct Strack{
int amount;
char client[50];
};
void struktura(int *a, char *s, struct Strack *ps){
ps->amount=*a;
strcpy(ps->client, *s);
// for(int c=0;c<5;c++){
// ps[c].amount=a[c];
// strcpy(ps[c].client, s[c]);
// }
}
void Print(int *X, struct Strack *s){
for(int c=0;c<X;c++){
printf("%d \t %s", s[c].amount, s[c].client);
printf("\n");
}
}
int main(){
int X=5;
int a1[]={32154, 123123, 234234, 324234234, 56421};
char *str[]={"Bob", "Vaka-Vaka", "Ron", "Wuka-Wuka", "Tod"};
struct Strack st[5];
// struktura1(a1, str, &s);
for(int c=0;c<5;c++){
struktura(a1[c], str[c], &st[c]);
}
Print(&X, &st);
return 0;
}
Ответы (1 шт):
Автор решения: Павел Ериков
→ Ссылка
Я так понимаю на этой строчке:
strcpy(ps->client, *s);Вы хотели копировать строку
sвps->client, но*sэто оператор разыменования, то есть вы передаетеstrcpy(char*, char).А вам нужно копировать строку:
strcpy(ps->client, s);В функции
PrintXэто указатель наint, то есть если вы сделатьXитераций, то вам опять токи нужно разыменовать указатель.for (int c = 0; c < *X; c++) {На строчке:
struktura(a1[c], str[c], &st[c]);Вы передаете
a1[c]по значению, а ваша функцияstruktureпринимает первым параметром указатель, то есть нужно получить адресa1[c]с помощью&.struktura(&a1[c], str[c], &st[c]);
Вроде на этом всё! :)