Penukaran Ditamatkan daripada String Literal kepada 'char*' dalam C
Apabila mengisytiharkan tatasusunan rentetan seperti yang ditunjukkan di bawah:
<code class="cpp">char *colors[4] = {"red", "orange", "yellow", "blue"};</code>
Anda mungkin menghadapi amaran pengkompil: "Penukaran yang ditamatkan daripada rentetan literal kepada 'char*'."
Memahami Ralat
Ralat ini berpunca daripada hakikat bahawa rentetan yang disediakan dalam "{}" ialah literal rentetan, ditakrifkan dalam kod program itu sendiri. Secara lalai, literal rentetan tidak boleh diubah, bermakna anda tidak boleh mengubah suai kandungannya semasa masa jalan, seperti dengan menulis pada penunjuknya.
Mengisytiharkan tatasusunan dengan penunjuk kepada aksara menjadikannya terdedah kepada ralat masa jalan jika anda cuba menulis ke input asal ("merah", "oren", dll.). Ini boleh mengubah suai rentetan asal secara tidak sengaja, membawa kepada hasil yang tidak dapat diramalkan.
Penyelesaian Tidak Ditamatkan
Untuk menyelesaikan isu ini dan mengelakkan kemungkinan ralat masa jalan, anda harus mengisytiharkan tatasusunan sebagai penunjuk const kepada aksara.
<code class="cpp">const char *colors[4] = {"red", "orange", "yellow", "blue"};</code>
Dengan menambahkan kata kunci const, anda memastikan bahawa rentetan itu tidak boleh diubah dan tidak akan diubah suai secara tidak sengaja.
Pertimbangan untuk Mengedit Nilai
Jika anda meramalkan keperluan untuk mengubah suai nilai rentetan pada masa jalanan, anda boleh menyalin literal rentetan ke tatasusunan berasingan atau menggunakan mekanisme seperti strtok() untuk memanipulasi aksara individu.
Atas ialah kandungan terperinci Mengapa saya mendapat amaran \'Penukaran ditamatkan daripada rentetan literal kepada \'char*\'\' dalam C apabila mengisytiharkan tatasusunan rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!