1. ホーム
  2. c

構造体を構造体にコピーする(C言語

2023-07-18 16:44:42

質問

同一の構造体を別の構造体にコピーして、後で最初の構造体との比較に使用したいのです。問題は、私のコンパイラは、このようなことをするときに警告を与えることです。私は別の方法でそれを行う必要がありますか、私はこれを間違ってやっています。

ヘッダーファイルで。

extern struct RTCclk
{
uint8_t second;
uint8_t minute;
uint8_t hour;
uint8_t mday;
uint8_t month;
uint8_t year;
}
RTCclk;

Cファイルで

struct RTCclk RTCclk;
struct RTCclk RTCclkBuffert;

void FunctionDO(void)
{
   ... // Some Code
   /* Copy first struct values into the second one */
   memcpy(&RTCclk, &RTCclkBuffert, sizeof RTCclk);
}

どのように解決するのですか?

単純な構造の場合は memcpy を使うか、あるいは単に一方から他方へ代入するだけです。

RTCclk = RTCclkBuffert;

コンパイラが構造をコピーするコードを作成してくれます。


コピーについての重要な注意点です。これは浅いコピーです。 memcpy . つまり、例えばポインターを含む構造体がある場合、コピーされるのは実際のポインターだけで、それらが指しているものはコピーされませんので、コピー後は同じメモリを指している2つのポインターが存在することになります。