[英]Strange change in struct members
我幾乎嘗試了一切,但我無法解決這個問題。 我有一個結構:
typedef struct{
char firstname[15];
char lastname[20];
char status[1];
char dateOfBirth[10];
} Rec;
和一個主要:
int main()
{
Rec rec;
strcpy(rec.status,"M");
strcpy(rec.dateOfBirth,"14-11-2000");
strcpy(rec.firstname,"Peter");
strcpy(rec.lastname,"Something");
printf("%s, %s, %s, %s\n", rec.status,rec.dateOfBirth,rec.firstname,rec.lastname);
return 0;
}
所以這個,應該打印 - > M,14-11-2000,Peter,Something ..但它沒有! 它打印 - > M14-11-2000,14-11-2000,Peter,Something。
換句話說,“狀態”成員被“損壞”。 我注意到,如果我改變結構數據的順序,輸出會改變,但總會有數據被破壞。
我定義結構的方式有什么問題嗎? 謝謝!
您需要使char數組長1個字節以允許空終止符。 特別是, status
和dateOfBirth
字段應分別為2和11個字節,具體取決於您使用它們的方式。 strcpy
復制給定數據加上1個空終止符字節。 如果沒有這個,strcpy最終會在該成員之后寫一個字節(在這種情況下可能是下一個成員,因為char數組可能最終會有一個字節對齊)。
在C中,字符串是以0字節終止的char數組,因此您的char數組需要長一個字節。
你的char
數組status
和dateOfBirth
太短; 你需要考慮終止空字符。
這是因為你的char數組缺少空終止符(狀態buff沒有空格)。 printf
繼續打印直到遇到空終止符,它沒有邊界檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.