[英]C language: copy data from one typedef struct to another and return a value
我是 C 的新手,我目前正在处理结构。 我被困住了,如果有人来救我,我将不胜感激。 所以我有一个 function 将输入数据从主模块写入子模块。 如果写入成功,它应该返回 0,如果不成功,它应该返回 1。 我一直在广泛阅读,但我仍然不确定是否使用 memcpy。 然后,在返回值上,我读到 memcpy 如果操作成功则返回 0,否则返回 1。 这是我的代码的那一部分:
typedef struct {
UINT32 carnum_n;
UINT32 carnum_k;
UINT32 results[30];
UINT32 feedback[30];
UINT32 errors[30];
} MAIN;
typedef struct {
UINT32 carnum_n;
UINT32 carnum_k;
UINT32 feedback[30];
} SETTING;
/* function to copy the data from the main to the sub-module */
UINT32 Write( MAIN *data, SETTING *info)
{
sc_memcpy ( &info->carnum_k, &data->carnum_k, sizeof (SETTING));
sc_memcpy ( &info->feedback, &data->feedback, sizeof (SETTING)); //copies the array
}
我真的很想把这件事做好。 提前致谢:)
问题1,您的代码不正确。
复制carnum_k
时, sizeof(SETTING)
错误。 sizeof (SETTING)
表示SETTING
结构中所有数据的大小。 但是您只需要复制carnum_k
,因此您需要提供carnum_k
的大小,即sizeof (UINT32)
, UINT32
是carnum_k
的类型。
memcpy ( &info->carnum_k, &data->carnum_k, sizeof (UINT32));
你也可以只写一个赋值info->carnum_k = data->carnum_k
。
反馈的副本有两个问题。
sizeof (SETTING)
是错误的,就像您复制carnum_k
时一样。 您可以使用sizeof(UINT32 [30])
, UINT32 [30]
是feedback
的类型。info->feedback
是一个数组地址,所以不需要&info->feedback
,只需info->feedback
。memcpy(info->feedback, data->feedback, sizeof(UINT32 [30]));
问题 2。我认为您的意思是您可能只想复制部分feedback
。
When you copy memory you need figure out src memory address, dest memory address, and the size of memory you want to copy.
所以如果你想从feedback[2]
复制到feedback[10]
。
&(data->feedback[2])
&(info->feedback[2])
。9 * sizeof(UINT32)
memcpy(&(info->feedback[2]), &(data->feedback[2]), 9*sizeof(UINT32));
问题 3。
我不知道答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.