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
Lepaskan: 2024-10-29 10:48:30
asal
703 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan