c - Få størrelse på LPTSTR eller CHAR * indeholdende hex-værdier

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at få størrelsen på en LPTSTR-variabel og en CONST CHAR-variabel ved hjælp af nedenstående kode, men jeg kan ikke få den rigtige størrelse.


Jeg skulle have 20, men i stedet får jeg 0 for const char * -variablen og 4 for LPTSTR-variablen.


const char *var1 =  "x00x00x00x00"
                    "x00x00x00x00"
                    "x02x00x00x00"
                    "x5BxE0x5BxE0"
                    "x00x00x00x00";

LPTSTR var2 =       "x00x00x00x00"
                    "x00x00x00x00"
                    "x02x00x00x00"
                    "x5BxE0x5BxE0"
                    "x00x00x00x00";

printf("\%d",  sizeof(var1));  // this outputs 0
printf("\%d",  sizeof(var2));  // this outputs 4


Jeg skal have størrelsen på værdien for at indsætte den i Windows-registreringsdatabasen som binære data (REG\_BINARY) ved hjælp af følgende funktion:


lRes = RegSetValueEx(hMykey, "Scancode Map", 0, REG\_BINARY, (LPBYTE) var2, sizeof(var2));

Bedste reference


Typen var1 er const char*, og størrelsen af ​​var2 er LPTSTR (hvilket er din sag er et alias til char*). sizeof var1 svarer til sizeof (const char*), ikke størrelsen af ​​den tegnrække den peger på. På din platform er sizeof (char*) 4 bytes.


Du kunne i stedet gøre:


const char var1[] = { 0x00, 0x00, ..., 0x00 };


Og så vil sizeof var1 svare til sizeof (const char[20]), hvilket er hvad du vil.

Andre referencer 1


du skal gøre


const char var1[20] =  "x00x00x00x00"
                "x00x00x00x00"
                "x02x00x00x00"
                "x5BxE0x5BxE0"
                "x00x00x00x00";

Andre referencer 2


Alternativ:


#define STR "x00x00x00x00" 
            "x00x00x00x00" 
            "x02x00x00x00" 
            "x5BxE0x5BxE0" 
            "x00x00x00x00"
const char * var1 = STR;

printf("\%d
", sizeof(STR)-1);


Ikke sikker på, hvad der er formålet med disse variabler, men det kan du også gøre


lRes=RegSetValueEx (hMykey, 'Scancode Map', 0, REG\_BINARY, (LPBYTE) STR, sizeof (STR) -1);


direkte.