nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

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
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 ]