繁体   English   中英

C 语言:将数据从一个 typedef 结构复制到另一个并返回一个值

[英]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. 请告诉我,这是正确的吗? 如果不是,那么正确的写法是什么? 或者我还有什么其他选择?
  2. 由于我也有一个数组,我应该如何处理它? 当我必须将 fb[10] 从主模块保存到子模块时会发生什么变化?
  3. 鉴于我似乎应该编写一行代码将每种类型的数据从主模块的表复制到子模块的输入表,我该如何合并返回条件?

我真的很想把这件事做好。 提前致谢:)

问题1,您的代码不正确。

复制carnum_k时, sizeof(SETTING)错误。 sizeof (SETTING)表示SETTING结构中所有数据的大小。 但是您只需要复制carnum_k ,因此您需要提供carnum_k的大小,即sizeof (UINT32)UINT32carnum_k的类型。

memcpy ( &info->carnum_k, &data->carnum_k, sizeof (UINT32));

你也可以只写一个赋值info->carnum_k = data->carnum_k

反馈的副本有两个问题。

  1. sizeof (SETTING)是错误的,就像您复制carnum_k时一样。 您可以使用sizeof(UINT32 [30])UINT32 [30]feedback的类型。
  2. 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])
  • dest 地址是&(info->feedback[2])
  • 从 2 到 10,有 9 个值要复制,所以总大小为9 * sizeof(UINT32)
memcpy(&(info->feedback[2]), &(data->feedback[2]), 9*sizeof(UINT32));

问题 3。

我不知道答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM