char *str = "awgweg";
char c = 'c';
*str += c; // 錯誤:修改字符串字面量導致未定義行為(段錯誤)
char *str = "..." 讓指針指向**只讀數據段**的字符串字面量。任何嘗試修改該內存的操作 (*str = ..., strcat, sprintf) 都會觸發段錯誤。
char str[100] = "awgweg"; // 分配在棧上,可寫
char c = 'c';
size_t len = strlen(str);
str[len] = c;
str[len + 1] = '\0'; // 手動添加結束符
// 或安全版
snprintf(str + len, sizeof(str) - len, "%c", c);
char *str = malloc(INIT_SIZE);
strcpy(str, "awgweg");
// 每次拼接前檢查剩餘空間,不足 realloc
// 最後 free(str);
| 聲明 | 存儲區 | 可修改 | 適用場景 |
|---|---|---|---|
| char *p = "lit" | 只讀數據段 | 否 | 只讀常量字符串 |
| char arr[] = "lit" | 棧/數據段 | 是 | 需修改/拼接的字符串 |