oregon ha scritto:
Per 3 stringhe da 80 caratteri (compreso terminatore)
char **arrayStringhe;
int n = 3;
int i;
arrayStringhe = (char **)malloc(n * sizeof(char *));
for(i=0; i<n; i++)
arrayStringhe[i] = (char *)malloc(80 * sizeof(char));
Gentilissimo Oregon,
come già scrivevo in un post ad un altro amico che mi ha scritto in merito, sto provvedendo a recuperare un buon libro, mi dovrebbe arrivare oggi il K&R, anche se tanti anni fa - non lo trovo più - non mi pare trattasse, nell'ambito dei puntatori, tale aspetto.
Il tuo codice mi è piuttosto chiero adesso. Unica perplessità, se io mi trovo in una situazione "dinamica" in cui il numero di "record" (righe, la prima dimensione dell'array bidimensionale) non è noto a priori dovrei ridimensionare tale dimensione. Di seguito ti porto un banale caso, per intenderci meglio sulla situazione che porto a titolo di esempio:
char *list[4];
int righe = 0;
while(1==1)
{
list[righe] = malloc(80*sizeof(char));
printf("Nominativo: ");
gets(list[righe]);
if (list[righe][0] == 'exit')
{
printf("Uscita...");
break;
}
righe++;
if (righe == 4)
{
break;
}
}
Superata la riga (indice uguale a 3) teoricamente dovrei riallocare la dimensione delle righe del mio puntatore a puntatore (corretto?)
A tal fine, poste vere le mie assunzioni, ho tentato di estendere il frammento di codice nel seguente modo:
char *list[4];
char *temp;
int righe = 0;
while(1==1)
{
list[righe] = malloc(80*sizeof(char));
printf("Nominativo: ");
gets(list[righe]);
if(list[righe][0] == 'exit')
{
printf("EOF...");
break;
}
righe++;
if((righe % 4)==0)
{
printf("Ridimensiono le righe...\n");
temp = realloc(*list, sizeof(*list)*2);
*list = temp;
printf("Nuova dimensione %d\n", sizeof(*list));
}
}
Ma ahimé dopo pochi nuovi inserimenti, dalla stampata a video della stringa "Ridimensiono le righe…" il programma va in segmentation fault.
Chiedo ancora scusa per il mio basso livello di conoscenza. Spero mi arrivi il libro quanto prima, anche se a mente non mi parte fosse tratta questo aspetto sul K&R
Ancora grazie infinite.