Не получается создать массив структур через указатели

Не получается создать массив структур через указатели. Если создать массивы глобальными - то всё работает, а я хочу научиться передавать массивы из одной функции в другую.

#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 шт):

Автор решения: Павел Ериков
  1. Я так понимаю на этой строчке:

    strcpy(ps->client, *s);
    

    Вы хотели копировать строку s в ps->client, но *s это оператор разыменования, то есть вы передаете strcpy(char*, char).

    А вам нужно копировать строку:

    strcpy(ps->client, s);
    
  2. В функции Print X это указатель на int, то есть если вы сделать X итераций, то вам опять токи нужно разыменовать указатель.

    for (int c = 0; c < *X; c++) {
    
  3. На строчке:

    struktura(a1[c], str[c], &st[c]);
    

    Вы передаете a1[c] по значению, а ваша функция strukture принимает первым параметром указатель, то есть нужно получить адрес a1[c] с помощью &.

    struktura(&a1[c], str[c], &st[c]);
    

Вроде на этом всё! :)

→ Ссылка