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

C 語言字符串比較陷阱:== 比較的是地址而非內容

     編輯:程式設計綜合問答

代碼:

char str[5]="start";
if (str == "start") printf("hallelujah!");
else printf("ooooops...");

輸出 ooooops...,原因:

本質區別

  • str 是數組名,在表達式中退化為**首元素地址**(指針)。
  • "start" 是字符串常量,存儲在**只讀數據區**,也是地址。
  • == 比較兩個地址是否相等,而非內容。

正確比較方法

  1. strcmp(標準庫):
    if (strcmp(str, "start") == 0) 返回 0 表示相等。
  2. strncmp(指定長度):
    if (strncmp(str, "start", 5) == 0)。
  3. 自寫循環(教學用):逐字符比較直到 \0。

記憶口訣

「C語言無字符串類型,數組名是指針,雙等號比地址,strcmp比內容。」

進階:編譯器優化陷阱

某些優化下,相同字面量可能合併存儲(字符串池),導致 str == "start"`` 偶爾為真,**極不可靠**,嚴禁依賴。

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