首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言基礎

C 語言字串指標:字元陣列與字串常數的記憶體差異

     編輯:C 語言基礎

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 常數區),導致寫入權限差異。理解此點是避免段錯誤的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved