首頁 >後端開發 >C++ >為什麼字串文字到「char*」的轉換在 C 中有效但在 C 中無效?

為什麼字串文字到「char*」的轉換在 C 中有效但在 C 中無效?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-15 12:25:15297瀏覽

Why Are String Literal to `char*` Conversions Valid in C but Invalid in C  ?

為什麼從字串文字到'char*' 的轉換在C 中有效但在C 中無效

在C 的§ C .1.1 中11 標準(ISO/IEC 14882:2011),宣告了賦值char* p = "abc" 無效的。但是,這種轉換在 C 中仍然有效。為什麼會出現這種情況?

C 中已棄用隱式轉換

在C 03 之前的C 版本中,從'char*' 的字符串文字是有效的,儘管已被棄用。字串文字應被視為“char const *”,因為如果沒有未定義的行為,則無法修改其內容。

明確轉換仍然有效

儘管隱式轉換已棄用在 C 11 中,明確轉換仍然有效。為了讓程式碼編譯,可以加入強制轉換: char* p = (char*)"abc".

強制轉換的缺點

但是,這種顯式轉換不“修復”代碼。它只是允許編譯器接受賦值。修改字串文字的潛在問題仍然存在。

解決方案:使用正確的類型

處理字串文字的正確方法是使用正確的類型,' char const *':char const *p =“ abc」。這種方法在 C 和 C 中都是有效且安全的。

C 中的理由

轉換在 C 中仍然有效,因為大量現有程式碼依賴它。標準委員會認為在沒有適當警告的情況下破壞此代碼是不可取的。

以上是為什麼字串文字到「char*」的轉換在 C 中有效但在 C 中無效?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn