從標準輸入讀取任意長度字串,存入動態配置的字元陣列,不使用 std::string,僅用陣列與指標實作。
n(如 16 字元)。len 記錄已讀長度。len == capacity 時:capacity * 2,memcpy 複製舊資料,buf[len] = '\0'。優點:攤銷 O(1) 擴充,記憶體連續,快取友好。
缺點:需手動管理複製與釋放。
Block { char data[BLOCK_SIZE]; Block* next; }。優點:無需大块連續記憶體,擴充無複製開銷。
缺點:隨機存取慢,記憶體碎片化,遍歷輸出需額外迴圈。
#include <cstdio>
#include <cstdlib>
#include <cstring>
int main() {
size_t cap = 16, len = 0;
char *buf = (char*)malloc(cap);
int ch;
while ((ch = getchar()) != EOF && ch != '\n') {
if (len + 1 >= cap) {
cap *= 2;
buf = (char*)realloc(buf, cap);
}
buf[len++] = (char)ch;
}
buf[len] = '\0';
printf("輸入長度 %zu:%s\n", len, buf);
free(buf);
return 0;
}
指數增長單一緩衝區是處理變長輸入的工業界標準做法(std::string、std::vector 皆採用)。理解其原理有助於在受限環境下手寫高效動態字串。