c/c++语言开发共享如何使用char *复制结构并指向它?

我是C编程的新手,很想得到一些帮助。

我有这个结构:

typedef struct house { int numOfRooms; char* houseName; }HOUSE,*pHOUSE; 

我想创建一个函数来获取指向HOUSE的指针,并返回一个新指针,指向位于内存中不同位置的同一个HOUSE – 目的是能够在不改变两者的情况下更改一个指针:我将尝试更清晰:

 pHOUSE duplicate_house(pHOUSE house) { pHOUSE newh = (pHOUSE)calloc(1,sizeof(HOUSE)); newh = house //I get here a pointer that points on the same house.. so If I change for exmample: // newh->numOfRooms = 9 - > both will change and I don't want it to happen! } 

我读到我们可以使用:memcpy_s但是这里如果我在结构中只有整数,那可能很容易,这里我有char *,所以意味着我还需要分别复制char * houseName ? 我能做什么? 如何复制具有char *等多种类型的对象? 如果我有arrays? 我能做什么 ?

 typedef struct house { int numOfRooms; char* houseName; struct house *houses[10]; }HOUSE,*pHOUSE; 

我怎么能复制那个?

非常感谢!

    您需要复制结构以及结构管理所有内存。 像这样:

     pHOUSE copy(pHOUSE house) { pHOUSE newHouse = malloc(sizeof *newHouse); // allocate if (pHOUSE) { memcpy(newHouse, house, sizeof *newHouse); // or "*newHouse = *house;" size_t const len = strlen(house->houseName); newHouse->houseName = malloc(len + 1); if (!newHouse->houseName) { free newHouse; return NULL; } strncpy(newHouse->houseName, house->houseName, len + 1); } return pHOUSE; } 

    如您所见,使用两个分配的error handling已变得非常麻烦。 如果你有多个内部分配,保持理智的唯一方法是系统地使用goto来创建适当的清理点。


    举例说明最后一点:

     struct FooLish { char * p1; char * p2; char * p3; }; struct FooLish * copy(struct FooLish const * oldFoo) { struct FooLish * newFoo = malloc(sizeof *newFoo); if (!newFoo) { goto end0; } { size_t const len = strlen(oldFoo->p1); newFoo->p1 = malloc(strlen(len + 1); if (!newFoo->p1) { goto end1; } strncpy(newFoo->p1, oldFoo->p1, len + 1); } { size_t const len = strlen(oldFoo->p2); newFoo->p2 = malloc(strlen(len + 1); if (!newFoo->p2) { goto end2; } strncpy(newFoo->p2, oldFoo->p2, len + 1); } { size_t const len = strlen(oldFoo->p3); newFoo->p3 = malloc(strlen(len + 1); if (!newFoo->p3) { goto end3; } strncpy(newFoo->p3, oldFoo->p3, len + 1); } return newFoo; end3: free(newFoo->p2); end2: free(newFoo->p1); end1: free(newFoo); end0: return NULL; } 

      以上就是c/c++开发分享如何使用char *复制结构并指向它?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

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

      ctvol管理联系方式QQ:251552304

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

      (0)
      上一篇 2021年1月28日
      下一篇 2021年1月28日

      精彩推荐