Rumah >pembangunan bahagian belakang >C++ >Mengapakah Penukaran String Literal kepada `char*` Tidak Sah dalam C tetapi Dibenarkan dalam C?

Mengapakah Penukaran String Literal kepada `char*` Tidak Sah dalam C tetapi Dibenarkan dalam C?

DDD
DDDasal
2024-12-17 10:11:25887semak imbas

Why is Converting a String Literal to `char*` Invalid in C   but Allowed in C?

Penukaran daripada String Literal kepada 'char*' dalam C vs. C

C 11 Standard secara eksplisit menyatakan bahawa menukar rentetan literal kepada 'char*' adalah tidak sah, manakala ia kekal sah dalam C. Perbezaan ini berpunca daripada perbezaan asas dalam cara kedua-dua bahasa mengendalikan rentetan literal.

Keserasian C dalam C

Secara sejarah, C membenarkan penukaran tersirat yang ditamatkan daripada literal rentetan kepada 'char'. Walau bagaimanapun, dalam C 11, penukaran ini telah dialih keluar secara rasmi dan memihak kepada merawat literal rentetan sebagai 'char const '. Ini memastikan ketakbolehubah, menghalang perubahan yang boleh membawa kepada tingkah laku yang tidak ditentukan.

Penghantaran Eksplisit dalam C

Walaupun penukaran tersirat tidak lagi tersedia dalam C , pelakon eksplisit ke 'char' masih boleh dilakukan. Walau bagaimanapun, ini tidak menyelesaikan isu asas ketakbolehubah. Mengubah suai nilai yang ditunjukkan oleh 'char' yang dihantar daripada literal rentetan akan tetap menghasilkan gelagat yang tidak ditentukan.

Keselamatan Diutamakan dalam C

Dengan menguatkuasakan jenis yang betul ('char const *') untuk literal rentetan, C mengutamakan keselamatan. Percubaan untuk mengubah suai literal akan dibenderakan sebagai ralat, menghapuskan potensi ranap sistem.

Kod Warisan dalam C

C mengekalkan keserasian dengan kod sedia ada yang bergantung pada tersirat penukaran daripada literal rentetan kepada 'char*'. Keputusan ini mungkin dibuat untuk mengelakkan perisian legasi rosak. Walau bagaimanapun, ia menyerlahkan perbezaan dalam falsafah antara C dan C apabila ia berkaitan dengan mengimbangi keserasian dan keselamatan.

Ringkasnya, penukaran daripada rentetan literal kepada 'char' adalah tidak sah dalam C kerana ia melanggar prinsip kekekalan. Walaupun C membenarkan penukaran ini atas sebab warisan, ia amat tidak digalakkan untuk menggunakan 'char const ' untuk meningkatkan keselamatan.

Atas ialah kandungan terperinci Mengapakah Penukaran String Literal kepada `char*` Tidak Sah dalam C tetapi Dibenarkan dalam C?. 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