簡體   English   中英

結構成員的奇怪變化

[英]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個字節以允許空終止符。 特別是, statusdateOfBirth字段應分別為2和11個字節,具體取決於您使用它們的方式。 strcpy復制給定數據加上1個空終止符字節。 如果沒有這個,strcpy最終會在該成員之后寫一個字節(在這種情況下可能是下一個成員,因為char數組可能最終會有一個字節對齊)。

在C中,字符串是以0字節終止的char數組,因此您的char數組需要長一個字節。

你的char數組statusdateOfBirth太短; 你需要考慮終止空字符。

這是因為你的char數組缺少空終止符(狀態buff沒有空格)。 printf繼續打印直到遇到空終止符,它沒有邊界檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM