Chr*_*ian 61 c struct copy microchip
我想将一个相同的结构复制到另一个结构中,然后将其用作第一个结构的比较.问题是,当我这样做时,我的编译器给了我一个警告!我应该以其他方式做到这一点还是我做错了:
在标题文件中:
extern struct RTCclk
{
uint8_t second;
uint8_t minute;
uint8_t hour;
uint8_t mday;
uint8_t month;
uint8_t year;
}
RTCclk;
Run Code Online (Sandbox Code Playgroud)
在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);
}
Run Code Online (Sandbox Code Playgroud)
Som*_*ude 134
对于简单的结构,您既可以memcpy
像使用一样使用,也可以只从一个到另一个进行分配:
RTCclk = RTCclkBuffert;
Run Code Online (Sandbox Code Playgroud)
编译器将创建代码以便为您复制结构.
关于复制的一个重要注意事项:它是一个浅层副本,就像它一样memcpy
.这意味着如果你有一个包含指针的结构,那么它只是被复制的实际指针而不是它们所指向的指针,因此在复制后你将有两个指向同一个内存的指针.
Gra*_*and 18
你的代码是正确的.您也可以直接将一个分配给另一个(参见Joachim Pileborg的答案).
当你后来比较两个结构时,你需要小心地比较结构,一次一个成员,而不是使用memcmp
; 请参阅如何在C中比较结构的相等性?
在c中复制结构,您只需按如下方式分配值:
struct RTCclk RTCclk1;
struct RTCclk RTCclkBuffert;
RTCclk1.second=3;
RTCclk1.minute=4;
RTCclk1.hour=5;
RTCclkBuffert=RTCclk1;
Run Code Online (Sandbox Code Playgroud)
现在 RTCclkBuffert.hour 的值为 5,
RTCclkBuffert.min 的值为 4
RTCclkBuffert.second 的值为 3