Mit einer partiellen Kopie würde ich erwarten, die übereinstimmenden Felder mit einer Kopie zu setzen, aber die nicht übereinstimmenden Felder nicht gesetzt (d. H. Behalten ihre vorherigen Werte).Können Sie eine Instanz einer Struktur teilweise in eine andere Anweisung eines anderen Typs kopieren?
Es scheint nicht zu passieren. Ich bin neugierig warum und ob das ein undefiniertes Verhalten ist?
#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
*/
Nicht definiertes Verhalten für den Zugriff über die Grenzen eines Objekts in 'memcpy (& s3, & s1, sizeof (s3));' da 'sizeof (s1)' kleiner als 'sizeof (s3)' ist. – EOF
Ist das 'struct' Tag oder was? –