C は代入演算子を使用して構造体 (構造体へのポインターではない) をコピーする方法を教えてください。私の質問を示すサンプルプログラムを以下に示します。
struct s {
char string[20];
};
void main() {
struct s var1, var2;
strcpy(var1.string, "hello");
printf("var1: %s\n", var1.string);
printf("var2: %s\n", var2.string);
var2 = var1;
printf("var1: %s\n", var1.string);
printf("var2: %s\n\n", var2.string);
strcpy(var2.string, "goodbye");
printf("var1: %s\n", var1.string);
printf("var2: %s\n", var2.string);
}
var2.string は何もないため、期待される出力は最初の「var1: hello var2:」です。
2 番目のブロックは、var1 と var2 が同じであるため、「var1: hello var2: hello」である必要があります。
var1 と var2 は同じメモリ位置である必要があるため、3 番目のブロックは "var1: goodbye var2: goodbye" である必要があります。
ただし、3 番目のブロックで得られるのは、「var1: hello var2: goodbye」です。したがって、行var2 = var1
は var2 のすべての属性を var1 の属性に自動的に設定するように見えます。これは、単純にメモリ内の場所に分解するのではなく、C が行うことですか?