Mengapakah menukar char kepada wchar_t dalam aplikasi Unicode saya mengakibatkan tingkah laku yang tidak ditentukan?

Barbara Streisand
Lepaskan: 2024-10-30 15:52:02
asal
1011 orang telah melayarinya

Why does converting char to wchar_t in my Unicode application result in undefined behavior?

Cara Menukar char kepada wchar_t untuk Penyepaduan Unikod

Masalah:

Pembangun mungkin menghadapi masalah menukar char kepada wchar_t dalam aplikasi Unicode. Contoh kod berikut menggambarkan ralat biasa:

<code class="cpp">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

Jawapan:

Isu timbul kerana wc ialah pembolehubah setempat yang diuruskan apabila fungsi kembali. Ini mengakibatkan tingkah laku yang tidak ditentukan. Pendekatan yang betul adalah untuk memperuntukkan wc secara dinamik menggunakan baharu dan memastikan bahawa kod panggilan mendelokasikan memori:

<code class="cpp">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

Nota: Kod panggilan mesti bertanggungjawab untuk menyamakan peruntukan memori untuk mengelakkan memori bocor.

Atas ialah kandungan terperinci Mengapakah menukar char kepada wchar_t dalam aplikasi Unicode saya mengakibatkan tingkah laku yang tidak ditentukan?. 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