Rumah > pembangunan bahagian belakang > C++ > Mengapa Tatasusunan Sifar Panjang dalam C Menyebabkan Ralat 2233, dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Tatasusunan Sifar Panjang dalam C Menyebabkan Ralat 2233, dan Bagaimana Saya Boleh Membetulkannya?

Linda Hamilton
Lepaskan: 2024-12-15 04:03:10
asal
330 orang telah melayarinya

Why Does a Zero-Length Array in C   Cause Error 2233, and How Can I Fix It?

Berurusan dengan "Array of Zero Length" dalam C

Dalam C , situasi "array of zero length" boleh ditemui dalam kod warisan. Ini melibatkan struct yang mengandungi tatasusunan dengan panjang sifar. Walaupun amaran ditindas oleh pragma, mencipta struktur baharu yang mengandungi tatasusunan sedemikian boleh menyebabkan ralat 2233. Mengapa ini berlaku dan apakah yang boleh dilakukan untuk menyelesaikannya?

Sebab menggunakan tatasusunan sifar panjang adalah sejarah C hack yang membenarkan peruntukan dinamik tatasusunan. Daripada menggunakan tatasusunan panjang 1 atau penuding, pembangun akan mencipta struct dengan tatasusunan sifar panjang. Ini akan membolehkan mereka mengira saiz tatasusunan secara dinamik menggunakan ahli nData struct.

Untuk membetulkan isu ini, C-Hack boleh digunakan. Fungsi mallocSomeData boleh dibuat untuk memperuntukkan tatasusunan panjang yang ditentukan secara dinamik:

struct someData* mallocSomeData(int size)
{
    struct someData*  result = (struct someData*)malloc(sizeof(struct someData) + size * sizeof(BYTE));
    if (result)
    {    result->nData = size;
    }
    return result;
}
Salin selepas log masuk

Dengan menggunakan fungsi ini, anda boleh mencipta objek someData dengan tatasusunan panjang yang dikehendaki, dengan berkesan menangani "tatasusunan" isu panjang sifar".

Atas ialah kandungan terperinci Mengapa Tatasusunan Sifar Panjang dalam C Menyebabkan Ralat 2233, dan Bagaimana Saya Boleh Membetulkannya?. 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