Entra

View Full Version : [C] Qualcuno sa risolvere l'errore?


Fabietto206
25-01-2008, 15:13
In qst funzione:
/*funzione chiamata dalla inserisci(char*u)*/
nodo*insert_in_albero(nodo*p,char*u){
int x=strlen(u);
if (p==NULL){
/*riservo uno spazio per nodo*/
p=(nodo*)malloc( sizeof(nodo));
if(!p){
printf("Errore di allocazione\n");
}

else{
p->parola= strdup(u); /*copia la stringa u nella sringa p->parola*/
p->lung_parola=strlen(p->parola); /*prendi la lunghezza della stringa
p->parola e metti nel campo p->lung_parola*/
p->left=p->right=NULL;
q=p;
return p;
}
}
if(strcmp(u,p->parola)<0){ /*se u è lessicograficamente minore di p->parola
inseriscilo a sinistra*/
p->left=insert_in_albero(p->left,u);
return p;
}

else if(strcmp(u,p->parola)>0){ /*altrimenti inseriscilo a destra*/

p->right=insert_in_albero(p->right,u);
return p;
}
else {
printf(" %s è una parola già inserita\n",p->parola);
system("PAUSE");
p->parola=u;
return p;
}
}


mi da un errore in qst riga:
p->parola= strdup(u);/*copia la stringa u nella sringa p->parola*/
dicendomi: [Warning] assignment makes pointer from integer without a cast

come risolvo?

andrea0032
25-01-2008, 15:23
parola l'hai dichiarato come char* ?
la stringa u da dove l'acquisisci?

Fabietto206
25-01-2008, 18:54
parola l'hai dichiarato come char* ?
la stringa u da dove l'acquisisci?

Si, parola è di tipo char*.
u è un parametro della funzione invece!!

Cmq la stringa la inserisco cn la seguente funzione:
/*funzione di inserzione di una parola nell'albero*/
void inserisci(char*u){
q=insert_in_albero(q,u);

}

Fabietto206
27-01-2008, 14:36
Nessuno sa aiutarmi?

k0nt3
27-01-2008, 16:08
prova a usare strcpy o ancora meglio strncpy specificando un limite massimo di caratteri da copiare che dipende dallo spazio che hai allocato per la variabile in cui copi la stringa.

Fabietto206
27-01-2008, 16:29
prova a usare strcpy o ancora meglio strncpy specificando un limite massimo di caratteri da copiare che dipende dallo spazio che hai allocato per la variabile in cui copi la stringa.

Nn riesco a capire cs vuoi dire!!

k0nt3
27-01-2008, 16:38
Nn riesco a capire cs vuoi dire!!

strcpy copia il contenuto di una stringa in un'altra stringa. la sua signature è: char *strcpy(char *destination, const char *source)

ora.. ci sono dei problemi se la stringa sorgente è più grande della memoria allocata per la stringa destinazione, quindi è meglio usare strncpy: char *strncpy(char *destination, const char *source, size_t n);
dove "n" è il numero massimo di caratteri da copiare.
ma tu non allochi memoria per la variabile parola vero? :stordita:

Fabietto206
27-01-2008, 20:46
strcpy copia il contenuto di una stringa in un'altra stringa. la sua signature è: char *strcpy(char *destination, const char *source)

ora.. ci sono dei problemi se la stringa sorgente è più grande della memoria allocata per la stringa destinazione, quindi è meglio usare strncpy: char *strncpy(char *destination, const char *source, size_t n);
dove "n" è il numero massimo di caratteri da copiare.
ma tu non allochi memoria per la variabile parola vero? :stordita:

No, nn la alloco la memoria x la variabile parola

k0nt3
28-01-2008, 10:50
mi da un errore in qst riga:
p->parola= strdup(u);/*copia la stringa u nella sringa p->parola*/
dicendomi: [Warning] assignment makes pointer from integer without a cast

come risolvo?

ah che stupido ho capito adesso qual'è il problema.
dichiara la struct in maniera simile a questa:

typedef struct nodo
{
char* parola;
int lung_parola;
struct nodo *left, *right;
} nodo;

Fabietto206
28-01-2008, 12:00
ah che stupido ho capito adesso qual'è il problema.
dichiara la struct in maniera simile a questa:

typedef struct nodo
{
char* parola;
int lung_parola;
struct nodo *left, *right;
} nodo;


è già dikiarato così....se vuoi ti posso mandare il codice così vedi x bene...

k0nt3
28-01-2008, 12:01
è già dikiarato così....se vuoi ti posso mandare il codice così vedi x bene...

sicuro di avere messo typedef struct nodo all'inizio e poi nodo; alla fine? servono tutti e due

Fabietto206
28-01-2008, 13:37
Ho fatto così:
/*variabili globali */

typedef struct nodo_albero nodo;

nodo*q=NULL;

nodo*t=NULL;

char *s;

char nom[ARRASIZE];

FILE* fp;
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ INIZIO FILE .h @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/

/*struttura di un nodo dell'albero*/
struct nodo_albero{
char*parola;
int lung_parola;
struct nodo_albero*left;
struct nodo_albero*right;

};