[問題] 消失的1byte ???

看板C_and_CPP (C/C++)作者 (paris)時間16年前 (2010/01/12 12:11), 編輯推噓1(104)
留言5則, 1人參與, 最新討論串1/1
想要驗證使用pragma pack()的功能 因此參考網路外又自己做了點小修改的一個程式 #include <stdio.h> #include <conio.h> #include <windows.h> int main(int argc, char* argv[]) { #pragma pack(4) ////記憶體對齊單位用DWORD typedef struct _aligment_DWORD{ char a ; WORD test1; char b ; char c ; char d ; } aligment_DWORD; #pragma pack( ) aligment_DWORD ali_dw ; ali_dw.a = 'A' ; ali_dw.b = 'B' ; ali_dw.c = 'C' ; ali_dw.d = 'D' ; LPTSTR pointer ; printf("aligment_DWORD struct is %d BYTES \n",sizeof(ali_dw)); pointer = (LPTSTR)(&ali_dw) ; printf("ali_dw.a is %c \n",*pointer); printf("ali_dw.test1 is %c \n",*(pointer + 1 )); printf("ali_dw.test1 is %c \n",*(pointer + 2 )); printf("ali_dw.test1 is %c \n",*(pointer + 3 )); printf("ali_dw.b is %c \n",*(pointer + 4 )); printf("ali_dw.c is %c \n",*(pointer + 5 )); printf("ali_dw.d is %c \n",*(pointer + 6 )); system("pause"); return 0; } 出來結果struct是8 bytes 但是在第二個宣告...WORD test1那邊並沒有宣告 所以預期應該是有"4個"隨機的character會出現在A~B之間 但下方的printf那邊已經把A~D都用指標抓出來了 但中間的test1卻只有3個??? 所以總和也只有7 bytes 剩下的1 byte呢? 我要如何用指標去抓出來呢??? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.9.4.124

01/12 12:28, , 1F
給你個提示, 把ali_dw.a與ali_dw.test1的address印出來
01/12 12:28, 1F

01/12 12:28, , 2F
看, 你就知道失落的那一byte在哪裡了, 基本上同樣是
01/12 12:28, 2F

01/12 12:29, , 3F
struct的alignment / padding機制造成的:)
01/12 12:29, 3F

01/12 12:30, , 4F
另外, 要以byte為單位取address中的值出來為什麼要用到
01/12 12:30, 4F

01/12 12:31, , 5F
LPTSTR?? 直接用char*或unsigned char*就好了吧@_@"
01/12 12:31, 5F
文章代碼(AID): #1BI_PXBG (C_and_CPP)
文章代碼(AID): #1BI_PXBG (C_and_CPP)