C 語言無專屬字串類型,通常用字元陣列儲存字串。另一種方式是直接用指標指向字串常數。
| 方式 | 語法 | 儲存區域 | 讀取 | 寫入 |
|---|---|---|---|---|
| 字元陣列 | char str[] = "hello"; | 全域資料區/棧區 | ✓ | ✓ |
| 字串常數指標 | char *str = "hello"; | 常數區 | ✓ | ✗ (執行期崩潰) |
#include <stdio.h>
int main() {
char *str = "https://c.biancheng.net";
printf("%s\n", str); // 整體輸出
for (int i = 0; str[i]; i++) printf("%c", str[i]); // 逐字元
return 0;
}
使用 %s、str[i]、*(str+i) 均可,語法與字元陣列幾乎相同。
char *str = "Hello World!"; str = "I love C!"; // 正確:修改指標指向 str[3] = 'P'; // 錯誤:嘗試修改常數區內容 → 段錯誤
gets、scanf 接收輸入):只能用字元陣列。// 正確:接收使用者輸入
char str[30];
gets(str); // 或 scanf("%s", str)
字元陣列與字串常數指標在語法上高度相似,但記憶體儲存區域不同(資料區 vs 常數區),導致寫入權限差異。理解此點是避免段錯誤的關鍵。