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(availsizebuf = (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 <

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);

你可能感兴趣的:(c/c++,c语言,c++)