## Mengapa Menggabungkan Rentetan Tersurat dan Watak Tersurat dalam C Membawa kepada Keputusan Yang Tidak Dijangka?

Linda Hamilton
Lepaskan: 2024-10-25 07:56:29
asal
437 orang telah melayarinya

## Why Does Concatenating a String Literal and a Character Literal in C   Lead to Unexpected Results?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Sebagai alternatif, anda boleh menggunakan operator penyambung rentetan, yang melaksanakan penyambungan intuitif:

<code class="cpp">string str = "ab";
str += 'c';</code>
Salin selepas log masuk

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!