對於部分副本,我希望設置一個副本的匹配字段,但保留不匹配的字段(即保留其先前的值)。你可以在一個語句中部分複製一個結構的實例到另一個不同類型的實例嗎?
它似乎沒有發生。我很好奇,爲什麼這是一些未定義的行爲?
#include <stdio.h>
#define print_base(s) printf("%d %d\n", s.a, s.b)
#define print_extended(s) printf("%d %d %d\n", s.a, s.b, s.c)
typedef struct
{
int a;
int b;
} base;
typedef struct
{
int a;
int b;
int c;
} extended;
int main()
{
base s1 = {1,2};
extended s2 = {0};
extended s3 = {0};
extended s4 = {4,5,6};
extended s5 = {4,5,6};
extended s6 = {7,8,9};
base s7 = {0};
print_extended(s2);
s2 = *(extended*)&s1;
print_extended(s2);
print_extended(s3);
memcpy(&s3, &s1, sizeof(s3));
print_extended(s3);
print_extended(s4);
s4 = *(extended*)&s1;
print_extended(s4);
print_extended(s5);
memcpy(&s5, &s1, sizeof(s5));
print_extended(s5);
/* lossy copy */
print_base(s7);
s7 = *(base*)&s6;
print_base(s7);
return 0;
}
/*
Actual Expected
0 0 0 0 0 0
1 2 1 1 2 0
0 0 0 0 0 0
1 2 1 1 2 0
4 5 6 4 5 6
1 2 1 1 2 6
4 5 6 4 5 6
1 2 1 1 2 6
0 0 0 0
7 8 7 8
*/
在memcpy(&s3,&s1,sizeof(s3));由於'sizeof(s1)'小於'sizeof(s3)''以外的對象範圍之外訪問的未定義行爲。 – EOF
這是'結構'日還是什麼? –