Mich wundert nur, daß das folgende Programm eben nicht klappt:
#include <stdio.h> #include <string.h> #include <gdbm.h>
int main() { datum val,key; const char *name;
....
val = gdbm_fetch(db,key);
/* val.dptr ist (char *) val.dsize ist (int) und besitzt die korrekte Länge von val.dptr */
memcpy(name,val.dptr,val.dsize);
return 0; }
Mich nicht :-) ... weillllll ... memcpy kopiert die Daten von val.dptr nach name, val.dsize bytes. Wo aber ist name ??? Im Wald ! ... oder besser nicht initialisiert. Also: a) Du kennst das Maximum M von val.dsize char name[<M>]; b) Du kennst es nicht: int main() { ... char *name; ... val = gdbm_fetch(db, key); name = (char*)malloc(val.dsize*sizeof(char)); memcpy(name, val.dptr, val.dsize); ... free(name); return 0; } Dabei musst Du ausserdem noch aufpassen, das die \0 richtig verarbeitet wird! Also entweder strlen()+1 in die Datenbank oder nach memcpy() name[val.dsize]=0 ... dann muss name aber immer ein byte mehr haben !
Willi