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
297 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!

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