c/c++动态数组

1、字符数组结构定义


typedef struct darr
{
    /**数组已使内存空间*/
    int   curLen;

    /**数组总内存空间*/
    int   len;

    /**字符串数组*/
    char* buf;

} sds;

2、动态扩容函数

/// 二倍扩容
void  test_sds(sds*  sds,const char* src)
{
  int newsize = sizeof(src);
  int mallocsize =  2*newsize ;
  /// 首次扩容
  if(sds->len==0)
  {
    sds->buf = (char*) malloc(mallocsize);
    if(sds->buf==NULL)
    {
      cout<< "malloc分配内存失败"  << endl;
      return;
    }
    strcpy(sds->buf,src);
    sds->len = mallocsize;
    sds->curLen = newsize;
    cout<<"首次开辟空间成功" <<  endl;
  }else{
    ///再次扩容
    int availsize= sds->len- sds->curLen;
    if(availsize<newsize){
      cout<<"容量不足,需要再次开辟" <<  endl;
      sds->buf = (char*) realloc(sds->buf,mallocsize);
      if(sds->buf==NULL)
       {
         cout<< "realloc分配内存失败"  << endl;
         return;
       }
       sds->len= sds->len + mallocsize ;
       cout<<"再次开辟空间成功" <<  endl;
    }
    strcat(sds->buf,src);
    sds->curLen = sds->curLen+newsize;
  
  }
  cout<<"len= "<< sds->len <<  ",curLen= " << sds->curLen<<",buf= " <<  sds->buf <<endl;
}

3、测试动态扩容函数

   sds sd;
   sds* ptr = &sd;
   cout<< "len="<< ptr->len  <<  ",cur="<< ptr->curLen << endl;
   const char*  s1 = (char*) "abc";
   test_sds(ptr,s1);
   const char*  s2 = (char*) "efg";
   test_sds(ptr,s2);
   const char*  s3 = (char*) "lhj";
   test_sds(ptr,s3);
   free(ptr);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值