mercury841
05-07-2006, 14:11
Ragazzi ho un problema con questo algoritmo:
/*-----------------------------------------------------------------------------------------------------
* Routine che crea, dalla lettura di un file
* un array di puntatori a carattere in cui
* l'ultimo puntatore punta a NULL.
* ---------------------------------------------------------------------------------------------------*/
char **crea_vet_stringhe(int file)
{
char **stringhe;
char *parola=NULL;
int size=1, //grandezza dell'array di stringhe
j=0; //contatore per scorrere la posizione in una parola
char c;
int nread;
int i;
if ((stringhe=(char **)malloc(size*sizeof(char *))) == NULL)
return(NULL);//errore allocazione
while ( read(file,&c,1) > 0 ) {//leggo carattere per carattere
if ( (c != ' ') && (c != '\0') && (c != '\n') && (c != EOF) ){
//costruisco la parola
if ( (parola=(char *)realloc(parola,(j+2)*sizeof(char ))) == NULL )
return(NULL);//errore di allocazione
parola[j]=c;
j=j+1;
}else{
if (parola != NULL){//parola trovata
parola[j]='\0';//carattere di fine stringa
printf("parola= %s\n",parola);
if ( (stringhe=(char **)realloc(stringhe,((size+1)*sizeof(char *)))) == NULL )
return(NULL);//errore di allocazione
if ( (stringhe[size-1]=(char *)malloc(strlen(parola))) == NULL)
return(NULL);//errore allocazione
strcpy(stringhe[size-1],parola);
size=size+1;
}
parola=NULL;
j=0;
}
}
stringhe[size-1]=NULL;//fine dell array di stringhe
return(stringhe);
}
la funzione legge un file, e crea, dalla lettura del file, un array di stringhe contenenti tutte le parole del file. Come ultimo elemento dell'array viene memorizzato NULL per indicarne la fine.
Andando a compilare ottengo questo Warning:
" warning: cast to pointer from integer of different size"
sulle seguenti righe:
if ( (parola=(char *)realloc(parola,(j+2)*sizeof(char ))) == NULL )
return(NULL);//errore di allocazione
if ( (stringhe=(char **)realloc(stringhe,((size+1)*sizeof(char *)))) == NULL )
return(NULL);//errore di allocazione
Da che dipende? Mi aiutate? ciao e grazie
/*-----------------------------------------------------------------------------------------------------
* Routine che crea, dalla lettura di un file
* un array di puntatori a carattere in cui
* l'ultimo puntatore punta a NULL.
* ---------------------------------------------------------------------------------------------------*/
char **crea_vet_stringhe(int file)
{
char **stringhe;
char *parola=NULL;
int size=1, //grandezza dell'array di stringhe
j=0; //contatore per scorrere la posizione in una parola
char c;
int nread;
int i;
if ((stringhe=(char **)malloc(size*sizeof(char *))) == NULL)
return(NULL);//errore allocazione
while ( read(file,&c,1) > 0 ) {//leggo carattere per carattere
if ( (c != ' ') && (c != '\0') && (c != '\n') && (c != EOF) ){
//costruisco la parola
if ( (parola=(char *)realloc(parola,(j+2)*sizeof(char ))) == NULL )
return(NULL);//errore di allocazione
parola[j]=c;
j=j+1;
}else{
if (parola != NULL){//parola trovata
parola[j]='\0';//carattere di fine stringa
printf("parola= %s\n",parola);
if ( (stringhe=(char **)realloc(stringhe,((size+1)*sizeof(char *)))) == NULL )
return(NULL);//errore di allocazione
if ( (stringhe[size-1]=(char *)malloc(strlen(parola))) == NULL)
return(NULL);//errore allocazione
strcpy(stringhe[size-1],parola);
size=size+1;
}
parola=NULL;
j=0;
}
}
stringhe[size-1]=NULL;//fine dell array di stringhe
return(stringhe);
}
la funzione legge un file, e crea, dalla lettura del file, un array di stringhe contenenti tutte le parole del file. Come ultimo elemento dell'array viene memorizzato NULL per indicarne la fine.
Andando a compilare ottengo questo Warning:
" warning: cast to pointer from integer of different size"
sulle seguenti righe:
if ( (parola=(char *)realloc(parola,(j+2)*sizeof(char ))) == NULL )
return(NULL);//errore di allocazione
if ( (stringhe=(char **)realloc(stringhe,((size+1)*sizeof(char *)))) == NULL )
return(NULL);//errore di allocazione
Da che dipende? Mi aiutate? ciao e grazie