[C] Passaggio da una funzione della dimensione di un array di stringhe dinamico

Messaggioda Pandemic » 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 :

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
Ultima modifica di anonymous_be1147 il 23/01/2019, 16:04, modificato 1 volta in totale.
Motivazione: Aggiunto BBCode al codice sorgente
Pandemic
Starting Member
Starting Member
 
Messaggio: 11 di 22
Iscritto il: 31/01/2017, 17:13

Re: [C] Passaggio da una funzione della dimensione di un array di stringhe dinamico

Messaggioda vict85 » 23/01/2019, 14:52

L'unico modo che hai è quello di salvarti la dimensione dell'array nella struttura utente.
vict85
Moderatore
Moderatore
 
Messaggio: 9470 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite