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