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