magagna
12-07-2007, 15:07
sto scrivendo una libreria per un progetto. Questa libreria, sostanzialmente, è composta da un set di funzioni che servono a gestire una lista ordinata.
Ho una funzione, lmake, che crea un nodo di questa lista riempiendo opportunamente i vari campi. Andando a provare, con un banale programma, queste funzioni mi sono accorto che proprio la più insospettabile, lmake appunto, non funziona. O meglio non inizializza alcuni campi come dovrebbe.
DEFINIZIONE NODO:
struct lnode{
char name[MAXB];
char pass[MAXB];
char pid[MAXB];
int stat;
struct pnode *pends;
struct lnode *next;
};
typedef struct lnode LNODE;
LMAKE:
LNODE *lmake(char *name,char *pass){
printf("%s %s\n",name,pass);
LNODE *x=(LNODE *)malloc(sizeof(LNODE));
strcpy(x->name,name);
strcpy(x->pass,name);
strcpy(x->pid,"");
x->stat=disconnesso;
x->pends=NULL;
x->next=NULL;
printf("%s %s\n",x->name,x->pass);
return x;
}
PROGRAMMA DI PROVA:
int main(){
LNODE *n1,*n2,*n3;
PNODE *t;
char buff[MAXB];
n1=lmake("nino","123");
n2=lmake("mara","456");
n3=lmake("poppy","789");
scanf("%s",buff);
return 0;
}
come si può vedere io mi faccio stampare, appena entra in lmake, i parametri che riceve (username e password). Mi faccio poi stampare i campi immediatamente prima che la funzione termini. L'output è assai strano:
nino 123
nn n
mara 456
mm m
poppy 789
pp p
in sostanza l'input è coerente, ma nel campo viene copiato qualcosa di diverso...e sono due ore che sbatto la testa su questo codice di 3 righe. Dopo un pò mi sono deciso a chiedere a chiunque abbia esperienza col C, perchè sicuro è una di quelle cazzate inumane che ignoro totalmente, e senza scusanti.
Vi ringrazio comunque per l'attenzione, anche se avrete letto solo le prime 3 righe :)
Ho una funzione, lmake, che crea un nodo di questa lista riempiendo opportunamente i vari campi. Andando a provare, con un banale programma, queste funzioni mi sono accorto che proprio la più insospettabile, lmake appunto, non funziona. O meglio non inizializza alcuni campi come dovrebbe.
DEFINIZIONE NODO:
struct lnode{
char name[MAXB];
char pass[MAXB];
char pid[MAXB];
int stat;
struct pnode *pends;
struct lnode *next;
};
typedef struct lnode LNODE;
LMAKE:
LNODE *lmake(char *name,char *pass){
printf("%s %s\n",name,pass);
LNODE *x=(LNODE *)malloc(sizeof(LNODE));
strcpy(x->name,name);
strcpy(x->pass,name);
strcpy(x->pid,"");
x->stat=disconnesso;
x->pends=NULL;
x->next=NULL;
printf("%s %s\n",x->name,x->pass);
return x;
}
PROGRAMMA DI PROVA:
int main(){
LNODE *n1,*n2,*n3;
PNODE *t;
char buff[MAXB];
n1=lmake("nino","123");
n2=lmake("mara","456");
n3=lmake("poppy","789");
scanf("%s",buff);
return 0;
}
come si può vedere io mi faccio stampare, appena entra in lmake, i parametri che riceve (username e password). Mi faccio poi stampare i campi immediatamente prima che la funzione termini. L'output è assai strano:
nino 123
nn n
mara 456
mm m
poppy 789
pp p
in sostanza l'input è coerente, ma nel campo viene copiato qualcosa di diverso...e sono due ore che sbatto la testa su questo codice di 3 righe. Dopo un pò mi sono deciso a chiedere a chiunque abbia esperienza col C, perchè sicuro è una di quelle cazzate inumane che ignoro totalmente, e senza scusanti.
Vi ringrazio comunque per l'attenzione, anche se avrete letto solo le prime 3 righe :)