typedef struct{
int nSize;
int nMaxCapacity;
char* szStr;
} StringBuilder;
StringBuilder* Initialize(int nCapacity);
void Append(StringBuilder *strBuilder, char* szStr);
void Clear(StringBuilder *strBuilder);
int _tmain(int argc, _TCHAR* argv[])
{
StringBuilder* strBuilder = Initialize(1);
Append(strBuilder, "I'm the string! :)\0");
printf("%s", strBuilder);
Clear(strBuilder);
getchar();
return 0;
}
StringBuilder* Initialize(int nCapacity)
{
StringBuilder* strBuilder = (StringBuilder*)malloc(sizeof(StringBuilder));
strBuilder->nMaxCapacity = nCapacity;
strBuilder->nSize = 0;
strBuilder->szStr = (char*)malloc(1);
strBuilder->szStr = "\0";
return strBuilder;
}
void Clear(StringBuilder *strBuilder)
{
if(strBuilder != NULL)
free(strBuilder);
}
void Append(StringBuilder *strBuilder, char* szStr)
{
if(strBuilder->nSize + strlen(szStr) > strBuilder->nMaxCapacity)
if((strBuilder->nMaxCapacity * 2) <= 2147483647)
{
strBuilder = (StringBuilder*)realloc(strBuilder, (strBuilder->nMaxCapacity * 2));
strBuilder->nMaxCapacity = strBuilder->nMaxCapacity * 2;
}
else
return; // overflow
else
strBuilder = (StringBuilder*)realloc(strBuilder, strBuilder->nSize + strlen(szStr));
strBuilder->nSize += strlen(szStr);
strBuilder->szStr = (char*)realloc(strBuilder->szStr, strBuilder->nSize + 2);
strcat(strBuilder->szStr, szStr);
}