char *pName = malloc(strlen("Yums") + 1);
strcpy(pName, "Yums");
strcat(pName, "Bob"); // 未擴容,緩衝區溢出,破壞堆元數據
free(pName); // free 失效/崩潰
`strcat` **不會自動擴容**,直接寫入 `pName` 末尾之後的內存,破壞堆管理結構,導致後續 `free` 崩潰或靜默腐敗。
size_t len = strlen(pName);
size_t add = strlen("Bob");
char *tmp = realloc(pName, len + add + 1);
if (!tmp) { /* 處理 OOM */ }
pName = tmp;
strcat(pName, "Bob"); // 現在安全
// ...
free(pName);
寫 `char *strappend(char **dst, const char *src)` 內部處理 `realloc`,返回新指針或錯誤碼,業務代碼簡潔安全。