我有以下函数,它被调用作为嵌入式 AVR 时钟上程序模块的开始。我想从将返回 date_time 结构的时钟对象中获取值,并将其复制到我从堆中分配的空间中。
void time_set_mode_start(Display *display, volatile Controls *controls,
volatile TimeKeeper *clock, void *data) {
DEBUG_LED_PORT |= _BV(DEBUG_LED);
data = malloc(sizeof(date_time));
}
从 clock->getTime() 返回的值获取数据到数据指针的最佳方法是什么?
最佳答案
一种方法是使用 memcpy
.具体来说,您可能需要 memcpy(data, clock->getTime(), sizeof(date_time))
。
另一种方法——可能更好,现在我想到了——是使用普通赋值:
*((date_time*)data) = *(clock->getTime());
这会将 data
视为 date_time *
,并为其指向的 date_time
对象分配一个值。
(注意:在上面的两个代码片段中,我假设 clock->getTime()
返回一个 date_time *
。这是正确的吗?)
顺便指出,data = malloc(sizeof(date_time));
将完全替换传入的原始 void * data
。你的调用者永远不会看到 data
现在指向的内存位置,因为指针是按值传递的。
关于c++ - 使用 malloc 和 void 指针复制临时结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8221347/