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

Pandemic1
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 :

#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.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

Risposte
vict85
L'unico modo che hai è quello di salvarti la dimensione dell'array nella struttura utente.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.