Re: hsearch --- hash table
Von: gigi (gigi at vattelappesca.it@sistrix.com) [Profil]
Datum: 10.02.2008 16:01
Message-ID: <47af11e0$0$17952$4fafbaef@reader1.news.tin.it>
Newsgroup: it.comp.lang.c
Datum: 10.02.2008 16:01
Message-ID: <47af11e0$0$17952$4fafbaef@reader1.news.tin.it>
Newsgroup: it.comp.lang.c
Dato che nessuno ha commentato :( ma io nel frattempo ho trovato/capito l'errore :) propongo il codice funzionante e spiego di seguito gigi wrote: > Il problema è che non mi trova elementi già inseriti tramite una > funzione, forse ciò è dovuto alla visibilità delle var locali??? > ma se così come posso risolvere?? si infatti era proprio questo il motivo se si definisce una la kiave della struct ENTRY come punatore ad array locale alla funzione fuori da questa, quand'anche i dati stiano in una struttura visibile globalmente non vengono trovati xkè è "sparita" la chiave che non è globale. se mi fossi sbagliato nell'interpretazione dell'errore vi prego di correggermi!! > Inoltre vorrei sapere se consigliate qualke libreria in particolare per > usare le hash table oppure bisogna codare tutto da sè senza includere > librerie?? aspetto ancora consigli da voi guru riguardo a tali domande di seguito il codice "assolto" :) #include <stdio.h> #include <search.h> #include <string.h> void search(char *key); void create(void); typedef struct atomo{ char key[100]; char dato[100]; }atomo; static atomo a[100]; static int indexA=0; int main() { char buffer[255]; hcreate(244); create(); scanf("%s",buffer); search(buffer); hdestroy(); return 0; } void create(void) { char u[]="aa"; char b[]="bb"; char h[]="0:40:96:b5:82:3c"; ENTRY item,find; item.data=(void *)a+(indexA); strcpy(a[indexA].key,u); strcpy(a[indexA++].dato,u); item.key=a[indexA-1].key; hsearch(item,ENTER); item.data=(void *)a+indexA; strcpy(a[indexA].key,b); strcpy(a[indexA++].dato,b); item.key=a[indexA-1].key; hsearch(item,ENTER); item.data=(void *)a+(indexA); strcpy(a[indexA].key,h); strcpy(a[indexA++].dato,h); item.key=a[indexA-1].key; hsearch(item,ENTER); item.key=u; item.data=NULL; if(hsearch(item,FIND)!=NULL) printf("trovato aa in create\n"); else printf("non trovato \n"); } void search(char *key) { ENTRY item; item.key=key; item.data=NULL; if(hsearch(item,FIND)!=NULL) printf("trovato\n"); else printf("non trovato \n"); }[ Auf dieses Posting antworten ]
