|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 409
|
[c]=problema funzione
Ragazzi ho un problema con questo algoritmo:
Codice:
/*-----------------------------------------------------------------------------------------------------
* 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);
}
Andando a compilare ottengo questo Warning: " warning: cast to pointer from integer of different size" sulle seguenti righe: Codice:
if ( (parola=(char *)realloc(parola,(j+2)*sizeof(char ))) == NULL )
return(NULL);//errore di allocazione
Codice:
if ( (stringhe=(char **)realloc(stringhe,((size+1)*sizeof(char *)))) == NULL )
return(NULL);//errore di allocazione
Da che dipende? Mi aiutate? ciao e grazie |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
A me non lo da il warning ma dipende dal compilatore.
Penso sia il confronto tra il valore restituito dalla realloc (puntatore) e il NULL che é 0 (intero) stdio.h: Codice:
#define NULL 0 Sennó casti il NULL a (char *)NULL Ciao
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 409
|
si infatti anche a me un compilatore mi da il warning e l'altro no, cmq grazie ciao
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 409
|
Quote:
|
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Codice:
linux: gcc -Wall prova.c -o p prova.c: In function `crea_vet_stringhe': prova.c:23: warning: unused variable `i' prova.c:22: warning: unused variable `nread' prova.c: At top level: prova.c:70: warning: return type defaults to `int' prova.c: In function `main': prova.c:71: warning: control reaches end of non-void function
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
1 - e' una buona regola di programmazione; 2 - la realloc() ti restituisce un altro tipo, presumibilmente (void *). E' quindi probabile che voglia lo stesso tipo in ingresso. Prova a fare il cast allo stesso tipo sul primo parametro. (cioe' realloc ((void *)parola, ......, ammesso che sia possibile) High Flying Sottovento
__________________
In God we trust; all others bring data |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:06.



















