Newsgroup: it.comp.lang.c
Titolo: hsearch --- hash table

salve stavo cercando di usare le funzioni x strutture di hash incluse
nella libc sotto linux ma nonostante mi sia letto il manuale non riesco
a capire il xkè il seguente programma non vada a buon fine
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??
qualcuno sarebbe così gentile da spiegarmi/illuminarmi o da indicarmi
dove posso leggere/trovare una soluzione/spiegazione
x la cronaca ho provato anche hsearch_r (la versione GNU)
che permette di creare + hash table che ho definito come var globali ma
non funziona.
Inoltre vorrei sapere se consigliate qualke libreria in particolare per
usare le hash table oppure bisogna codare tutto da sè senza includere
librerie??
di seguito il codice "incriminato" :)
#include <stdio.h>
#include <search.h>
void search(char *key);
void create(void);
int main() {
        char buffer[255];
        hcreate(244);
        create();
        scanf("%s",buffer);
        search(buffer);
        hdestroy();
        return 0;
}
void create(void) {
        char a[]="aa";
        char b[]="bb";
        char h[]="0:40:96:b5:82:3c";
        ENTRY item,find;
        item.key=a;
        hsearch(item,ENTER);
        item.key=b;
        hsearch(item,ENTER);
        item.key=h;
        hsearch(item,ENTER);
        item.key=a;
        item.data=NULL;
// questa ricerca funziona
        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;
// questa ricerca NON funziona !!!!
        if(hsearch(item,FIND)!=NULL) printf("trovato\n");
        else printf("non trovato \n");
}

 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;
