c/c++语言开发共享在C中复制结构数组

我已经很久没有使用C语言了,这让我发疯了。 我有一个结构数组,我需要创建一个将一个数组复制到另一个数组的函数(我需要一个精确的副本),但我不知道如何定义函数调用。 我想我需要使用指针,但是当我尝试它时会给我一个错误。

struct group{ int weight; int x_pos; int y_pos; int width; int height; }; struct group a[4]; struct group b[4]; copySolution(&a, &b); 

最后一个声明给我发错了。 正如我所说,用C编程已经很久了,所以我现在有点迷失了:(

    应该这样做:

     memcpy(&b, &a, sizeof(a)); 

    编辑 :顺便说一句:它将保存一个b的副本。

    正如JohannesWeiß所说, memcpy()是一个很好的解决方案。

    我只想指出你可以像普通类型一样复制结构:

     for (i=0; i<4; i++) { b[i] = a[i]; /* copy the whole struct a[i] to b[i] */ } 

    这有一种伪装不好的家庭作业的感觉……无论如何,鉴于原始post中copySolution的预定调用格式, copySolution的正确定义如下所示

     void copySolution(struct group (*a)[4], struct group (*b)[4]) { /* whatever */ } 

    现在,在copySolution您可以以您喜欢的任何方式复制数组。 要么使用一个循环

     void copySolution(struct group (*a)[4], struct group (*b)[4]) { const struct group *pb, *pbe; struct group *pa; for (pa = *a, pb = *b, pbe = pb + sizeof *b / sizeof **b; pb != pbe; ++pa, ++pb) *pa = *pb; } 

    或使用上面建议的memcpy

     void copySolution(struct group (*a)[4], struct group (*b)[4]) { memcpy(b, a, sizeof *b); } 

    当然,你必须首先决定你希望你的数组被复制到哪个方向。你没有提供任何信息,所以每个人都只是得出了一些结论。

    在我的情况下,以前的解决方案无法正常工作 例如,@JohannesWeiß的解决方案没有复制“足够”的数据(它复制了大约一半的第一个元素)。
    所以万一有人需要一个解决方案,这会给你正确的结果,这里是:

     int i, n = 50; struct YourStruct *a, *b; a = calloc(n, sizeof(*a)); b = malloc(n * sizeof(*b)); for (i = 0; i < n; ++i) { // filling a } memcpy(b, a, n * sizeof(*a)); // <----- see memcpy here if (a != NULL) free(a); a = calloc(n*2, sizeof(*a)); memcpy(a, b, n * sizeof(*b)); // <------ see memcpy here again 

    一些注意事项,我使用calloc作为a,因为在'// fill a'部分我正在进行需要初始化数据的操作。

    将它们作为指针传递给函数后,编译器没有关于数组大小的信息。 因此,您经常需要第三个参数:要复制的数组的大小。

    解决方案(没有任何错误检查)可能是:

     void copySolution(struct group* a, struct group* b, size_t size) { memcpy(a, b, size * sizeof(*a)); } 

    最简单的方法可能就是

      b=a 

    虽然memcpy()的解决方案也可以使用。

    需要了解更多c/c++开发分享在C中复制结构数组,也可以关注C/ C++技术分享栏目---计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享在C中复制结构数组相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979882.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐