首頁 >後端開發 >C++ >為什麼在宣告字串陣列時,在 C 中會收到「已棄用從字串文字到「char*」的轉換」警告?

為什麼在宣告字串陣列時,在 C 中會收到「已棄用從字串文字到「char*」的轉換」警告?

Patricia Arquette
Patricia Arquette原創
2024-10-29 10:48:30702瀏覽

Why do I get a

已棄用C 中從字串文字到'char*' 的轉換

宣告如下所示的字串陣列時:

<code class="cpp">char *colors[4] = {"red", "orange", "yellow", "blue"};</code>

您可能會遇到編譯器警告:「已棄用從字串文字到'char*' 的轉換。」

了解錯誤

此錯誤源自於事實上,「{}」中提供的字串是字串文字,在程式碼本身中定義。預設情況下,字串文字是不可變的,這意味著您無法在運行時修改它們的內容,例如透過寫入它們的指標。

使用指向字元的指標聲明數組,如果您嘗試寫入,則很容易出現運行時錯誤原始輸入(「紅色」、「橘色」等)。這可能會意外修改原始字串,從而導致不可預測的結果。

非棄用解決方案

要解決此問題並避免潛在的運行時錯誤,您應該聲明該數組作為指向字元的 const 指標。

<code class="cpp">const char *colors[4] = {"red", "orange", "yellow", "blue"};</code>

透過新增 const 關鍵字,可以確保字串不可變且不會被無意中修改。

編輯值的注意事項

如果您預見到需要在運行時修改字串值,您可以將字串文字複製到單獨的數組或使用strtok () 等機制來操作各個字元。

以上是為什麼在宣告字串陣列時,在 C 中會收到「已棄用從字串文字到「char*」的轉換」警告?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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