memcpy
-
hallo,
ich moechte einen string (mit 22 Zeichen) einer binaeren Datei einlesen,
bzw. mitmemcpyauslesen!
allerdings hat der string in der binaerdatei keine enderkennung.pabyBuf = (uchar *) malloc(22); fread( pabyBuf, 22, 1, pVL->fpVL ); memcpy( pVL->vlName, pabyBuf , 22 ); free(pabyBuf); pabyBuf = (uchar *) malloc(18); fread(pabyBuf,18,1, psVL->fpVL); memcpy( &psVL->wGrfTyp, pabyBuf, 2 ); ... uswohne die enderkennung klappt dass mit dem "kopieren" nicht wirklich, da ich beim weiteren einlesen aus irgendeinem grund nicht mehr an der position 23 bin.
liegt wahrscheinlich an der enderkennung- wer weiss weiter???
(ach ja, ich muss in C programmieren!!)
-
... fread( pabyBuf, 22 /* Elementgröße */ , 1 /* Anzahl Elemente */ , pVL->fpVL ); ... fread( pabyBuf, 18 /* Elementgröße */ , 1 /* Anzahl Elemente */ , psVL->fpVL ); ...Verwendest du die fread() Funktion nicht falsch?
Laut meiner Dokumentation (siehe unten) ist der zweite Parameter (size_t size) die Grösse eines einzulesenden Elements und der dritte Parameter (size_t nitems) zeigt an, wie viele dieser Elemente eingelesen werden sollen.Daher müssten diese beiden Parameter bei dir nur vertauscht werden und es sollte wie gewünscht funktionieren:
... fread(pabyBuf, 1 /* Elementgröße */, 22 /* Anzahl Elemente */, pVL->fpVL ); ... fread(pabyBuf, 1 /* Elementgröße */, 18 /* Anzahl Elemente */, psVL->fpVL); ...Standard C Library Functions fread(3C) NAME fread, fwrite - buffered binary input/output SYNOPSIS #include <stdio.h> size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);
-
... pabyBuf = (uchar *) malloc(22); ... pabyBuf = (uchar *) malloc(18); ...Du musst hier nicht casten, wenn pabyBuf als uchar* deklariert ist. Du darfst halt nicht vergessen, den Header <stdlib.h> zu includieren.