為什麼從字串文字到'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中文網其他相關文章!