問題的提出:首先看一下代碼
#include
#include
typedef struct
{
char c;
int i;
float j;
}TSTRUCT;
int main(void)
{
printf("char size = %d\n", sizeof(char));
printf("int size = %d\n", sizeof(int));
printf("float size = %d\n", sizeof(float));
printf("TSTRUCT size = %d\n", sizeof(TSTRUCT));
return 0;
}
這段代碼的輸出爲
char size = 1
int size = 4
float size = 4
TSTRUCT size = 12
按照我的理解是想構建一個9個字節的結構,但是分開來計算的大小與結構總體的大小不一致,這個問題讓我糾結了幾天,後來在朋友的幫助下得以解決,原來在VS中的設置可以改變結構數據大小的提取方式,具體步驟如下。
1、在在解決方案頁面下單擊右鍵,選擇項目屬性;
2、單擊C/C++ ->代碼生成,改變結構成員對齊,選擇1字節,在運行程序。
更改後的輸出:
char size = 1
int size = 4
float size = 4
TSTRUCT size = 9
完全按照我設計的輸出,問題得到解決。
此問題容易出現在讀取整塊數據的時候,當讀取的數據按照結構體大小讀取就會容易出現錯誤。