Salve a tutti, sono nuovo sul forum e apro questa discussione perché non sono riuscito a trovare niente di già aperto che mi potesse aiutare.
Sto scrivendo un programma in C, e sono bloccato in un punto. Ho creato una struct, che deve contenere i dettagli di un catalogo; nel main ho dichiarato un puntatore che punta alla struct. Ho allocato dinamicamente la struct, così da avere un array di struct allocate dinamicamente, prendendo da un file il numero di righe, e quindi il numero di strutture da allocare. Ho allocato dinamicamente anche i campi della struct presi da file, ma fin qui nessun problema.
(Questa parte funziona, l'ho testata, alloca e acquisisce bene tutti i dati)
codice:
typedef struct cat{
char *codice, *nome_prodotto, *categoria, *data;
int prezzo,unita;
}catalogo;
int main(int argc, const char * argv[]) {
int n_prodotti=0, i=0;
char codice_curr[10], nome_prodotto_curr[25], categoria_curr[25], data_curr[10];
FILE *fp;
catalogo *p_cat;
fp=fopen("catalogo.txt", "r");
fscanf(fp, "%d", &n_prodotti);
p_cat= (catalogo *)malloc((n_prodotti)*sizeof(catalogo));
while (i<n_prodotti) {
fscanf(fp, "%s %s %s %d %d %s", codice_curr, nome_prodotto_curr, categoria_curr, &p_cat[i].prezzo,&p_cat[i].unita, data_curr);
p_cat[i].codice=(char *)malloc((strlen(codice_curr))*sizeof(char));
p_cat[i].nome_prodotto=(char *)malloc((strlen(nome_prodotto_curr))*sizeof(char));
p_cat[i].categoria=(char *)malloc((strlen(categoria_curr))*sizeof(char));
p_cat[i].data=(char *)malloc((10)*sizeof(char));
strncpy(p_cat[i].codice, codice_curr, strlen(codice_curr));
strncpy(p_cat[i].nome_prodotto, nome_prodotto_curr, strlen(nome_prodotto_curr));
strncpy(p_cat[i].categoria, categoria_curr, strlen(categoria_curr));
strncpy(p_cat[i].data, data_curr, 10);
i++;
}
Adesso dovrei passare (credo si possa fare) il puntatore all'array di struct ad una funzione, per poter effettuare, tramite la funzione, la stampa dell'array di struct.
Ho provato a dichiarare questa funzione, ma mi da errori continui ,tra cui "conflicting type for stampa", e dato che abbiamo appena affrontato l'argomento allocazione dinamica e puntatori, non so proprio come muovermi.
codice:
void stampa(struct str *pt, int n_prod);
int main(int argc, const char * argv[]){...}
void stampa (struct str *pt, int n_prod) {
//stampa
}
Quello che vorrei riuscire a fare, è passare il puntatore di array di struct alla funzione e stampare ogni campo di ogni struct.
Spero sia stato chiaro nella spiegazione, grazie in anticipo.