Rumah > pembangunan bahagian belakang > C++ > Mengapa Percubaan untuk Menukar char kepada wchar_t dengan mbstowcs() Membawa kepada Keputusan Yang Tidak Dijangka?

Mengapa Percubaan untuk Menukar char kepada wchar_t dengan mbstowcs() Membawa kepada Keputusan Yang Tidak Dijangka?

Linda Hamilton
Lepaskan: 2024-10-29 07:56:30
asal
524 orang telah melayarinya

Why Does Attempting to Convert char to wchar_t with mbstowcs() Lead to Unexpected Results?

Cara Menukar char dengan betul kepada wchar_t untuk Penyepaduan Unikod

Menukar rentetan char kepada wchar_t adalah penting untuk menyepadukan rentetan aksara biasa ke dalam aplikasi Unicode. Satu pendekatan biasa ialah melalui fungsi mbstowcs().

Percubaan asal:

Kod berikut mungkin kelihatan seperti pelaksanaan yang mudah tetapi malangnya menghasilkan hasil yang tidak dijangka:

<code class="c++">const wchar_t *GetWC(const char *c)
{
    const size_t cSize = strlen(c)+1;
    wchar_t wc[cSize];
    mbstowcs (wc, c, cSize);

    return wc;
}</code>
Salin selepas log masuk

Mengetahui Lebih Dalam:

Isunya terletak pada pengisytiharan wc sebagai pembolehubah setempat. Selepas fungsi dikembalikan, wc menjadi diuruskan, meninggalkan fungsi dengan penuding menghala ke memori sampah.

Penyelesaian:

Untuk menyelesaikan masalah ini, kami memperuntukkan memori untuk wc secara dinamik dan kembalikan penunjuk kepadanya. Kod yang diubah suai di bawah menunjukkan perkara ini:

<code class="c++">const wchar_t *GetWC(const char *c)
{
    const size_t cSize = strlen(c)+1;
    wchar_t* wc = new wchar_t[cSize];
    mbstowcs (wc, c, cSize);

    return wc;
}</code>
Salin selepas log masuk

Kaveat:

Adalah penting untuk ambil perhatian bahawa kod panggilan kini bertanggungjawab untuk mengagihkan memori yang diperuntukkan secara dinamik untuk mengelakkan ingatan bocor.

Atas ialah kandungan terperinci Mengapa Percubaan untuk Menukar char kepada wchar_t dengan mbstowcs() 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