Rumah > pembangunan bahagian belakang > C++ > Mengapakah Penukaran Rentetan Huruf kepada `char*` Sah dalam C tetapi Tidak Sah dalam C ?

Mengapakah Penukaran Rentetan Huruf kepada `char*` Sah dalam C tetapi Tidak Sah dalam C ?

Mary-Kate Olsen
Lepaskan: 2024-12-15 12:25:15
asal
382 orang telah melayarinya

Why Are String Literal to `char*` Conversions Valid in C but Invalid in C  ?

Mengapa Penukaran daripada String Literal kepada 'char*' adalah Sah dalam C tetapi Tidak Sah dalam C

Dalam § C.1.1 C 11 Standard (ISO/IEC 14882:2011), tugasan char* p = "abc" diisytiharkan tidak sah. Walau bagaimanapun, penukaran ini masih sah dalam C. Mengapakah ini berlaku?

Penukaran Tersirat Ditamatkan dalam C

Dalam versi C sehingga C 03, penukaran daripada rentetan literal kepada 'char*' adalah sah, walaupun tidak digunakan lagi. Tersurat rentetan harus dianggap sebagai 'char const *', kerana kandungannya tidak boleh diubah suai tanpa gelagat yang tidak ditentukan.

Penukaran Eksplisit Kekal Sah

Walaupun penukaran tersirat telah ditamatkan dalam C 11, penukaran eksplisit kekal sah. Untuk membuat kod dikompilasi, cast boleh ditambah: char* p = (char*)"abc".

Kelemahan Casting

Walau bagaimanapun, penukaran eksplisit ini tidak "membetulkan" kod. Ia hanya membenarkan pengkompil menerima tugasan. Isu yang berpotensi dengan mengubah suai literal rentetan masih wujud.

Penyelesaian: Gunakan Jenis Betul

Cara yang betul untuk mengendalikan literal rentetan ialah menggunakan jenis yang betul, ' char const *': char const *p = "abc". Pendekatan ini sah dan selamat dalam kedua-dua C dan C .

Justifikasi dalam C

Penukaran kekal sah dalam C kerana sejumlah besar kod sedia ada bergantung padanya . Pelanggaran kod ini tanpa amaran yang sewajarnya dianggap tidak diingini oleh jawatankuasa standard.

Atas ialah kandungan terperinci Mengapakah Penukaran Rentetan Huruf kepada `char*` Sah dalam C tetapi Tidak Sah dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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