代碼:
char str[5]="start";
if (str == "start") printf("hallelujah!");
else printf("ooooops...");
輸出 ooooops...,原因:
str 是數組名,在表達式中退化為**首元素地址**(指針)。"start" 是字符串常量,存儲在**只讀數據區**,也是地址。== 比較兩個地址是否相等,而非內容。if (strcmp(str, "start") == 0) 返回 0 表示相等。if (strncmp(str, "start", 5) == 0)。\0。「C語言無字符串類型,數組名是指針,雙等號比地址,strcmp比內容。」
某些優化下,相同字面量可能合併存儲(字符串池),導致 str == "start"`` 偶爾為真,**極不可靠**,嚴禁依賴。