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

C語言新手避坑:單引號與雙引號的區別——從段錯誤理解字符與字符串

     編輯:關於C語言

C語言新手避坑:單引號與雙引號的區別——從段錯誤理解字符與字符串

初學時將 '\0' 寫成 "\0",導致段錯誤(Segmentation Fault),深刻體會單雙引號差異。

錯誤代碼

for (i=0; *(p+i) != "\0"; i++)  // 錯:雙引號是字符串字面量,地址非0,條件恆真
    *(q+i) = *(p+i);
*(q+i) = "\0";  // 錯:賦值字符串地址給 char,截斷導致垃圾值

正確代碼

for (i=0; *(p+i) != '\0'; i++)  // 正:單引號是字符常量,值為 0
    *(q+i) = *(p+i);
*(q+i) = '\0';  // 正:賦值字符 0

核心區別

特性單引號 'x'雙引號 "x"
類型int (字符常量)char* (字符串字面量)
值字符編碼值 (如 'A'=65)字符串首地址 (含隱含 \0)
長度1 字符 (轉義序列算1個)字符數 + 1 (結束符)
可修改不可修改 (常量)不可修改 (常量區)

段錯誤本質

訪問非法內存地址(如解引用野指針、棧溢出、寫只讀段)。本例中 *(q+i) = "\0" 將字符串地址(如 0x400123)截斷存入 char,後續作為字符串指針解引用時跳轉到隨機地址導致崩潰。

記憶口訣

單引號存值,雙引號存址;字符用單引,字符串用雙引。

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