[C] Passaggio da una funzione della dimensione di un array di stringhe dinamico
Inviato: 23/01/2019, 10:45
Salve, vi scrivo per un problema a me difficile da risolvere. Premetto che sono un autodidatta ed ho purtroppo studiato il C da solo . Mi sono trovato dinanzi alla creazione di questo programma che richiede i seguenti punti :
1 acquisizione di un insieme di nickname e la lista amici per ogni nickname ;
2 visualizzazione a schermo dei nickname e delle loro liste amici.
Il codice è il seguente :
Il mio problema è il passaggio della dimensione di ogni lista amici che è diversa per ogni nick alle altre funzioni ovvero il "dim=strlen(insieme[i].lista amici)". Ho provato l'strlen ma ovviamente essendo un array di puntatori da errori , ho provato il sizeof ma essendo un array dinamico non funziona . Scusate in anticipo per il post non so come funziona il linking del codice ,ovviamente il testo non rispetta l'ordine delle parentesi , in ogni caso l'unico problema del codice è quel strlen . Vi ringrazio in anticipo
1 acquisizione di un insieme di nickname e la lista amici per ogni nickname ;
2 visualizzazione a schermo dei nickname e delle loro liste amici.
Il codice è il seguente :
- Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
char nickname[30];
char **lista_amici;
}utente;
utente *insieme;
void ist (void);
void ac (utente *insieme, int n);
void print (utente *insieme, int n);
int main (){
FILE *ptr;
int scelta;
int size;
if((ptr=fopen("test.txt","w+"))==NULL){
puts("ERRORE");
}
else{
ist();
while(1){
printf("?");
scanf("%d", &scelta);
switch(scelta){
case 1: printf("Inserire numero di nickname");
scanf("%d", &size);
insieme = malloc(size);
ac(insieme,size);
break;
case 2: print(insieme, size);
break;
case 3: printf("Chiusura programma");
exit(0);
}
}
fclose(ptr);
}
system("PAUSE");
return 0;
}
void ist (void){
printf("Benvenuto\n");
printf("Puo' scegliere tra le seguenti opzioni\n");
printf("1 : Acquisizione nickname\n");
printf("2 : Visualizzazione nickname e lista amici per ogni nickname\n");
printf("3: Chiusura programma\n");
printf("Inserire scelta\n");
}
void ac (utente *insieme, int n){
int scelta1;
int dim2;
for(unsigned int i=0; i<n ; i++){
printf("Inserire il nickname dell'utente");
scanf("%s", insieme[i].nickname);
printf("Vuoi inserire degli amici?");
printf("Premere 1 per accettare , 0 per non accettare");
scanf("%d", &scelta1);
if (scelta1 == 1){
printf("Inserire numero di amici");
scanf("%d", &dim2);
insieme[i].lista_amici = (char**)calloc(dim2,sizeof(char*));
for(unsigned int j=0; j<dim2 ; j++){
printf("Inserire amicizia");
scanf("%s", insieme[i].lista_amici[j]);
}
free(insieme[i].lista_amici);
}
}
}
void print(utente *insieme, int n){
int dim;
for(unsigned int i=0; i<n ; i++){
dim=strlen(insieme[i].lista_amici);
printf("Questo è il nick --> %s\n", insieme[i].nickname);
for (unsigned int j=0; j<dim ; j++){
printf("Questo è l'amico ---> %s\n", insieme[i].lista_amici[j]);
}
}
}
Il mio problema è il passaggio della dimensione di ogni lista amici che è diversa per ogni nick alle altre funzioni ovvero il "dim=strlen(insieme[i].lista amici)". Ho provato l'strlen ma ovviamente essendo un array di puntatori da errori , ho provato il sizeof ma essendo un array dinamico non funziona . Scusate in anticipo per il post non so come funziona il linking del codice ,ovviamente il testo non rispetta l'ordine delle parentesi , in ogni caso l'unico problema del codice è quel strlen . Vi ringrazio in anticipo