思路:
0、对目标字符串预先分配10个长度
1、使用strstr判断字符串是否在目标字符串中,如果存在就跳过
2、判断预添加长度是否超过剩余的长度,如果不超过就直接将预添加的字符串添加目标串后
3、如果长度不够,使用realloc对目标字符串重新分配内存,然后再拷贝字符串
#include <iostream>
#include "stdio.h"
#include <string.h>
#include <map>
using namespace std;
int main()
{
int iMallocSize = 10;
char* pData = (char*)malloc(iMallocSize);
int nDataLen = 0;
char szTmp[20] = "";
for(int i = 0; i < 100; i++)
{
printf("==========%d===========\n", i);
memset(&szTmp, 0x00, sizeof(szTmp));
sprintf(szTmp, "##%d##", i);
if(strstr(pData, szTmp) != NULL)
{
printf("find data : %s \n", szTmp);
}
else
{
printf("pData size: %d \n", nDataLen);
if(nDataLen >= iMallocSize - 10 )
{
char* ptmp = (char*)realloc(pData, iMallocSize + 50);
if(ptmp != NULL)
{
pData = ptmp;
iMallocSize += 50;
}
else
{
printf("申请内存失败");
continue;
}
}
memcpy(pData + nDataLen, szTmp, strlen(szTmp));
nDataLen += strlen(szTmp);
pData + nDataLen = '\0';
printf("iMallocSize:%d \n", iMallocSize);
}
}
return 0;
}