首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言字符串在內存中的兩種定義方式詳解

     編輯:程式設計綜合問答

代碼對比

char a[] = "abcdef";
char *p = "abcdef";

核心區別

特性char a[]char *p
存儲位置棧區(或數據段,視作用域而定)指針變量在棧,字面量在只讀數據段
可修改性內容可修改指向只讀內存,嘗試修改導致未定義行為
sizeof 結果7(含結束符 \0)指針大小(32位為4,64位為8)
賦值操作不可整體賦值可指向其他字符串

內存佈局圖解

char a[]:在棧上分配 7 個字節,複製字面量 "abcdef\0" 到該數組。
char *p:在棧上分配指針變量 p,指向只讀數據段中的 "abcdef\0"。

常見錯誤示例

char *p = "hello";
p[0] = 'H'; // 運行時崩潰:嘗試寫入只讀內存

char a[] = "hello";
a[0] = 'H'; // 正確,a 可修改

最佳實踐建議

  • 需要修改字符串內容時,使用 char arr[] = "..." 或動態分配 malloc。
  • 只讀場景(如傳參給 printf)可用 const char *p = "...",編譯器會提示寫入違規。
  • 嚴禁對字符串字面量解引用賦值。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved