> 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