memcpy



  • hallo,
    ich moechte einen string (mit 22 Zeichen) einer binaeren Datei einlesen,
    bzw. mit

    memcpy
    

    auslesen!
    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 );
        ... usw
    

    ohne 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.


Anmelden zum Antworten