Mengapa Penukaran Huruf Rentetan kepada 'char*' Dibenarkan dalam C tetapi Ditamatkan dalam C
Dalam C, adalah sah untuk menetapkan rentetan literal terus ke penunjuk 'char*', seperti yang ditunjukkan di bawah:
char* p = "abc";
Walau bagaimanapun, dalam C 11 dan seterusnya, penukaran tersirat ini telah dialih keluar kerana potensinya untuk membawa kepada tingkah laku yang tidak ditentukan jika rentetan literal diubah suai. Piawaian C secara eksplisit menyatakan dalam § C.1.1 bahawa contoh di atas kini tidak sah.
Untuk menangani isu ini, C membenarkan cast eksplisit untuk menukar literal rentetan kepada penunjuk 'char*'. Pelakon ini jelas menunjukkan bahawa pengaturcara memahami potensi risiko dan menerima tanggungjawab atas sebarang akibat yang mungkin timbul.
char* p = (char*)"abc"; // Valid with explicit cast
Pelakon eksplisit dalam C mempunyai dua tujuan:
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa walaupun dengan hantaran eksplisit, menetapkan rentetan literal kepada penunjuk 'char' masih tidak dianggap sebagai amalan terbaik dalam C . Pendekatan yang lebih selamat adalah dengan menggunakan penunjuk 'const char', yang secara jelas menunjukkan bahawa literal rentetan tidak boleh diubah suai:
char const *p = "abc"; // Valid and safe
Ini menjamin bahawa literal rentetan akan kekal tidak diubah suai, menghalang potensi tidak ditentukan tingkah laku.
Dalam C, penukaran tersirat daripada rentetan literal kepada penunjuk 'char*' kekal sah kerana jumlah yang besar kod warisan yang bergantung pada tingkah laku ini. Mengalih keluar penukaran tersirat dalam C akan memecahkan sejumlah besar program sedia ada.
Atas ialah kandungan terperinci Mengapakah Rentetan Langsung Literal kepada `char*` Penukaran Dibenarkan dalam C tetapi Ditamatkan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!