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

C 語言字串基礎操作全攻略:初始化、長度計算、指標與陣列存取差異

     編輯:關於C語言

C 語言字串基礎操作全攻略:初始化、長度計算、指標與陣列存取差異

1. 字串初始化三種方式

// 1. 指定大小,列舉字元 (隱含補 \0)
char s1[10] = {'a','b','c'}; // 其餘為 0

// 2. 字串字面值初始化 (自動加 \0、自動計算長度)
char s2[] = "abcdefg"; // 長度 8 (含 \0)

// 3. 指標指向字串常數 (唯讀區,不可修改)
const char *s3 = "hello"; // 或 char *s3 = "hello"; (C 標準建議 const)

2. strlen vs sizeof

char buf[100] = "abc";
strlen(buf) == 3;   // 字串長度 (不含 \0)
sizeof(buf) == 100; // 陣列總位元組數
sizeof("abc") == 4; // 字串常數大小 (含 \0)

3. 陣列下標 vs 指標算術

char s[] = "abcdefg";
for (int i=0; i<strlen(s); ++i) printf("%c ", s[i]);     // 陣列下標
for (char *p=s; *p; ++p) printf("%c ", *p);              // 指標走訪
for (int i=0; i<strlen(s); ++i) printf("%c ", *(s+i));  // 指標算術等價
// s[i] 編譯器轉為 *(s+i)

4. 常見誤區

  • char *p = "abc"; p[0] = 'x'; → 未定義行為 (修改唯讀記憶體)。
  • char s[] = "abc"; s = "def"; → 編譯錯誤 (陣列名不可修改)。
  • char *p = malloc(10); strcpy(p, "abc"); free(p); → 正確動態分配模式。

5. 記憶體區域

釐清這些概念,能避免 90% 的字串相關 Bug。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
宣告儲存區可修改生命週期
char s[] = "abc";堆疊是函數結束
char *p = "abc";唯讀資料段否程式全期
char *p = malloc(...);堆疊是手動 free