[英]Why can I modify a string literal with CLion?
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.