Avatar billede frostholm Praktikant
24. maj 2002 - 11:18 Der er 7 kommentarer og
1 løsning

memcpy - hjælp

Hejsa....

Jeg har følgende variable :

struct returoplysninger
{
  struct firmaopl firma[50];
  struct ratioplysninger rati;
  char startkey        [56];
  char user_id        [11];
  char rec_antal      [3];
  char kob_mess_level  [2];
  char kob_mess_number [5];
  char kob_mess_descri [31];   
};

struct returoplysninger retopl;
char udbuffer [8000];


Jeg vil så gerne have lagt indholdet af hele min struct over i min udbuffer variable.

Hvis jeg prøver følgende :

memcpy(udbuffer,&retopl,sizeof(returoplysninger));

får jeg kun værdien af første felt i min struct firmaopl, hvorfor, og havd skal jeg ellers gøre ?

Kan det lade sig gøre den anden vej fra buffer til struct ?

Mvh

Michael F

Avatar billede jpk Nybegynder
24. maj 2002 - 11:28 #1
Hvad returnerer sizeof(returoplysninger)?
Avatar billede laffe Nybegynder
24. maj 2002 - 11:31 #2
Hvordan ved du, at du kun kopierer det første felt over ?
Avatar billede laffe Nybegynder
24. maj 2002 - 11:32 #3
firmaopl er jo en null-termineret streng, og ender derfor med '\0'
Når du udskriver udbuffer, så vil du kun få vist det første felt i strengen (pga '\n')
Avatar billede frostholm Praktikant
24. maj 2002 - 11:33 #4
den returnere 14204.

Men også efter at have rettet min buffer størrelse til 15000 gør den det samme, kun den første værdi :-(
Avatar billede frostholm Praktikant
24. maj 2002 - 11:35 #5
Tak laffe, det er selvfølgelig defor
Avatar billede jpk Nybegynder
24. maj 2002 - 11:41 #6
Du bør nok lige checke at sizeof returnerer det rigtige

Du kan evt. prøve at indsætte linien:
#pragma pack(1)
øverst i filen og se om sizeof returnerer det samme.
Avatar billede soepro Nybegynder
24. maj 2002 - 12:07 #7
Det er god latin at bruge sizeof() på den mindste af de to variabler i fbm. memcpy, ligesom man bruger variabelnavnet - ikke dens typedef:

if sizeof(retopl) < sizeof(udbuffer)
  memcpy(udbuffer, &retopl, sizeof(retopl)); // retopl her - ikke returoplysninger, for hvad nu hvis retopl ikke er en variabel af typen returoplysninger.
else
  memcpy(udbuffer, &retopl, sizeof(udbuffer));
Avatar billede chries Nybegynder
24. maj 2002 - 12:47 #8
det kan godt være farlig at bruge sizeof på array's. flytter man koden til en funktion der tager arrayed som parameter , returner sizeof ikke det samme mere:
#include "iostream.h"

void func( char array[] )
{
    cout << "func: " << sizeof(array) << endl;
}

int main(int argc, char* argv[])
{
    char array[128];
    cout << "main: " << sizeof(array) << endl;
   
    func( array );

    return 0;
}

output:
main: 128
func: 4
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester