簡體   English   中英

為什么我可以用 CLion 修改字符串文字?

[英]Why can I modify a string literal with CLion?

#include <stdio.h>

int main() {
    char *name = "Thank you";
    name[0] = 'a';
    printf("%s", name);
}

它工作正常:

有用

我的理解是name[0] = 'a'不應該工作。

那么它為什么有效呢?

C 標准對嘗試修改字符串文字沒有任何限制。 但是,如果您嘗試修改字符串文字,結果是undefined behavior

引用C11 ,第 6.4.5 章(字符串文字)/P7

[...] 如果程序嘗試修改這樣的數組,則行為未定義。

您認為該程序允許您修改字符串文字的內容這一事實是 UB 的眾多結果之一。

您的理解幾乎是正確的,該程序確實格式錯誤,但這並不意味着它應該出現故障或失敗,它會調用未定義的行為。

不幸的是,未定義行為的可能症狀之一是程序表現得像它應該的那樣。

N1570 ISO/IEC 9899:201x §3.4.3 中描述的未定義行為

1未定義的行為

在使用不可移植或錯誤的程序結構或錯誤數據時的行為,本國際標准對此不作任何要求。

2注意

可能的未定義行為范圍從完全忽略情況並產生不可預測的結果,在翻譯或程序執行期間以環境特征的文件化方式(有或沒有發出診斷消息),到終止翻譯或執行(發出診斷消息)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM