我希望将一个相同的 struct 复制到另一个 struct 中,稍后将其用作第一个 struct 的比较.问题是,当我这样做时,我的编译器会给我一个警告!我应该用另一种方式做,还是我做错了:

在头文件中:

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);
}

推荐答案

对于简单的 struct ,您可以像使用memcpy一样使用memcpy,或者只需从一个指定到另一个:

RTCclk = RTCclkBuffert;

编译器将为您创建复制 struct 的代码.


关于复制有一个重要的注意事项:这是一个浅显的复制,就像memcpy一样.这意味着,如果你有一个包含指针的 struct ,那么只会复制实际的指针,而不是它们所指向的内容,所以在复制之后,你会有两个指针指向同一个内存.

C++相关问答推荐

有什么方法可以从Linux中未剥离的二进制文件中取回源代码吗?

错误:八进制常数中的数字9无效

在Windows上构建无聊的SSL x64

为什么这个C程序代码会产生以下结果?

无效使用未定义类型'structsquare'?

在#include中使用C宏变量

如何使fputs功能提示错误输入并要求用户重新输入.程序停止而不是请求新的输入

我无法让LLDB正确运行我的可执行文件

我的程序在收到SIGUSR1信号以从PAUSE()继续程序时总是崩溃()

在循环中复制与删除相同条件代码的性能

用gcc-msse 2编译的C程序包含AVX 1指令

For循环中的变量行为不符合预期.[C17]

如何使用libgpio(d)为Raspberry Pi编译C程序?

如何在不更改格式说明符的情况下同时支持双精度和长双精度?

在Ubuntu上使用库部署C程序的最佳实践

如何编写postgresql支持函数

按字典顺序打印具有给定字符的所有可能字符串

c如何传递对 struct 数组的引用,而不是设置 struct 的副本

在C中交换字符串和数组的通用交换函数

C11 嵌套泛型