Avatar billede Lasse Novice
08. september 2005 - 17:09 Der er 3 kommentarer og
1 løsning

Hvorfor virker dette ikke

Hvorfor printer dette ikke en string ud:

BYTE bs[200] = {0x3, 0x17, 0x0, 0x69, 0, 0x6d, 0, 0x61, 0, 0x67, 0, 0x65, 0, 0x4e, 0, 0x61,
                        0, 0x6d, 0, 0x65, 0, 0, 0, 0x63, 0, 0x6d, 0, 0x64, 0, 0x4c, 0, 0x69,
                        0, 0x6e, 0, 0x65, 0, 0, 0};

    MessageBox(NULL, (LPCWSTR)(bs+ 3), (LPCWSTR)(bs+ 3), 0);


Naar dette goer det:

BYTE bs[200] = {0x3, 0x17, 0x0, 0x69, 0, 0x6d, 0, 0x61, 0, 0x67, 0, 0x65, 0, 0x4e, 0, 0x61,
                        0, 0x6d, 0, 0x65, 0, 0, 0, 0x63, 0, 0x6d, 0, 0x64, 0, 0x4c, 0, 0x69,
                        0, 0x6e, 0, 0x65, 0, 0, 0};
    LPCWSTR test = new WCHAR[10];
   
    memcpy((LPBYTE)test, bs + 3, 20);

    MessageBox(NULL, test, test, 0);
Avatar billede arne_v Ekspert
08. september 2005 - 17:28 #1
du kan da ikke ligge 3 til et array
Avatar billede arne_v Ekspert
08. september 2005 - 17:29 #2
prøv

MessageBox(NULL, ((LPCWSTR)bs)+3, ((LPCWSTR)bs)+), 0);
Avatar billede Lasse Novice
08. september 2005 - 18:04 #3
ok... det er selvfoelgelig heller ikke lige saa nemt at gennemskue. Mit byte array er ikke en string, men:

byte[0] = offset of string1
byte[1] = offset of string2
byte[2] = byte val
byte[byte[0]] - ? string1
byte[byte[1]] - ? string2

Jeg har fundet ud af at problemet ligger i at adressen (bs + 3) ligger paa en ulige adresse i memory (Datatype misalignment). Dette kan man ikke med LPWSTR. Hvis jeg f.eks. sletter byte[2], saa virker det. Jeg bliver nok noedt til at kopiere bytesne for at vaere sikker.
Avatar billede Lasse Novice
08. september 2005 - 18:25 #4
lukker spg.
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