結構體賦值是覆蓋的問題

2021-06-21 08:28:39 字數 1075 閱讀 6686

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

#include "conio.h"

typedef struct uploaduserinfo

upload_element;

char s_nation[3]="gg";

char s_address[70]="ddddd";

char s_birthday[8]=;

void main()

{upload_element s1,s2;

memset(&s1,0,sizeof(upload_element));

memset(&s2,0,sizeof(upload_element));

strcpy(s1.address,s_address);

strcpy(s1.nation,s_nation);

strcpy(s1.birthdate,s_birthday);

printf("\n%s\n",s1.address);

printf("\n%s\n",s1.birthdate);

printf("\n%s\n",s1.nation);

s2=s1;

printf("\n---------%s-------%s--------%s------\n",s2.address,s2.birthdate,s2.nation);

輸出結果:

ddddd

-----------ddddd-------------12345678--------------------------------------

結論:s1.nation和s2.nation都沒有值。

為什麼會出現這種情況:

因為結構體中的成員變數的記憶體分配是連續的,是相鄰的,上述的**中給birthdate[8]賦值時,並沒有結束符'\n',而**中又先給成員nation賦值,再給birthdate賦值,當給birthdate賦值時,由於沒有結束符,當到了第八個位元組時沒有停止,繼續賦值,而由於nation在結構體中記憶體挨著birthdate,又在其之後,因此被覆蓋,導致無值。

結構體賦值問題

首先定義兩個結構體 struct udpdata struct scanudpdata short itotaly long ltotalx udpdata udpdata int callnum udpthread收資料的次數 然後給結構體賦值 pdata new udpdata 注意 此處要ne...

結構體賦值問題

如下面 所示,在給結構體變數賦值時,特別是結構體中的結構體成員變數,需要注意賦值方式。include stdio.h struct time struct date struct datelist void main struct date d3 struct date d2 struct date...

結構體是可以相互賦值的

include include include using namespace std int main 定義乙個操作員的結構體 struct operater operater ope1 operater ope2 cout 請輸入操作員的資訊 ope1.id cout 請輸入操作員的名字 ope...