Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menukar char kepada wchar_t dengan Selamat dalam Aplikasi Unicode?

Bagaimana untuk Menukar char kepada wchar_t dengan Selamat dalam Aplikasi Unicode?

DDD
DDDasal
2024-11-03 09:11:03540semak imbas

How to Safely Convert char to wchar_t in a Unicode Application?

Menukar char kepada wchar_t: Menyelesaikan Gelagat Tidak Ditakrifkan

Dalam aplikasi Unicode, menyepadukan rentetan char standard memerlukan penukaran char kepada wchar_t. Walau bagaimanapun, percubaan untuk melaksanakan penukaran ini selalunya menghadapi gelagat yang tidak ditentukan.

Pertimbangkan fungsi berikut:

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

    return wc;
}

Fungsi ini memperuntukkan tatasusunan wchar_t, menukar char kepada wchar_t, dan mengembalikan penunjuk ke wc. Walau bagaimanapun, wc ialah pembolehubah tempatan yang didelokasikan pada penghujung fungsi, membawa kepada tingkah laku tidak ditentukan apabila penunjuk yang dikembalikan dinyahrujuk.

Membetulkan Isu

Ralat boleh diperbaiki dengan memperuntukkan tatasusunan wchar_t* secara dinamik dalam fungsi:

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;
}

Peruntukan dinamik ini memastikan bahawa memori akan kekal melebihi jangka hayat fungsi.

Tanggungjawab Pemanggil

Adalah penting untuk ambil perhatian bahawa pemanggil GetWC() kini bertanggungjawab untuk menyamakan kedudukan memori yang diperuntukkan. Kegagalan berbuat demikian akan mengakibatkan kebocoran ingatan.

Atas ialah kandungan terperinci Bagaimana untuk Menukar char kepada wchar_t dengan Selamat dalam Aplikasi Unicode?. 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