Teka-teki: Rentetan dan Penyatuan Watak Enigma dalam C
Apabila cuba menggabungkan rentetan literal dengan aksara tersurat dalam C , beberapa kelakuan yang tidak dijangka boleh timbul. Pertimbangkan kod berikut:
<code class="cpp">string str = "ab" + 'c'; cout << str << endl;</code>
Menariknya, baris ini menghasilkan output "abc". Untuk membongkar misteri ini, adalah penting untuk memahami operasi asas.
Di bawah tudung, pengkompil mentafsir rentetan literal "ab" sebagai rentetan gaya C dan aksara literal 'c' sebagai nilai integer. Oleh kerana penggabungan rentetan tidak ditentukan untuk jenis ini, pengkompil menambah nilai integer 'c' ke alamat literal rentetan.
Manipulasi ini boleh membawa kepada hasil yang tidak dapat diramalkan, kerana memori yang diperuntukkan untuk rentetan melebihi . Akibatnya, atur cara mungkin mencetak aksara dari alamat yang terhasil sehingga menemui aksara nol.
Untuk menyelesaikan isu ini, beberapa pendekatan boleh diambil. Pertama, anda boleh menukar secara eksplisit aksara kepada rentetan menggunakan pelakon:
<code class="cpp">string str = std::string("ab") + 'c';</code>
Sebagai alternatif, anda boleh menggunakan operator penyambung rentetan, yang melaksanakan penyambungan intuitif:
<code class="cpp">string str = "ab"; str += 'c';</code>
Dalam kes kedua, kaedah operator terlampau beban kelas rentetan digunakan untuk penyambungan yang lancar.
Atas ialah kandungan terperinci ## Mengapa Menggabungkan Rentetan Tersurat dan Watak Tersurat dalam C Membawa kepada Keputusan Yang Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!