Rumah >pembangunan bahagian belakang >C++ >Mengapa saya mendapat amaran \'Penukaran ditamatkan daripada rentetan literal kepada \'char*\'\' dalam C apabila mengisytiharkan tatasusunan rentetan?

Mengapa saya mendapat amaran \'Penukaran ditamatkan daripada rentetan literal kepada \'char*\'\' dalam C apabila mengisytiharkan tatasusunan rentetan?

Patricia Arquette
Patricia Arquetteasal
2024-10-29 10:48:30704semak imbas

Why do I get a

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn