為什麼在C 中允許字串文字轉換為'char*' 但在C 中不推薦
在C 中,分配a是有效的字串文字直接轉換為“char*”指針,如下所示:
char* p = "abc";
但是,在 C 11 及更高版本中,此隱式轉換已被刪除,因為如果修改字串文字,它可能會導致未定義的行為。 C 標準在 C.1.1 節中明確指出,上述範例現在無效。
為了解決此問題,C 允許明確強制轉換將字串文字轉換為「char*」指標。這種強制轉換清楚地表明程式設計師了解潛在的風險並接受可能出現的任何後果的責任。
char* p = (char*)"abc"; // Valid with explicit cast
C 中的明確強制轉換有兩個目的:
但是,需要注意的是,即使使用明確強制轉換,將字串文字分配給 'char' 指標仍然不被認為是 C 中的最佳實踐。更安全的方法是使用「const char」指針,它明確指示不應修改字串文字:
char const *p = "abc"; // Valid and safe
這保證了字串文字將保持不變,防止潛在的未定義
在C 中,從字串文字到「char*」指標的隱式轉換仍然有效,因為大量遺留程式碼依賴於此行為。刪除 C 中的隱式轉換將會破壞大量現有程式。
以上是為什麼 C 中允許直接字串文字到「char*」轉換,但在 C 中不建議使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!