Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mencipta Tatasusunan Bersaiz Dinamik dalam C untuk Mengendalikan Fail Saiz Tidak Diketahui?

Bagaimanakah Saya Boleh Mencipta Tatasusunan Bersaiz Dinamik dalam C untuk Mengendalikan Fail Saiz Tidak Diketahui?

Barbara Streisand
Barbara Streisandasal
2024-11-14 20:59:021032semak imbas

How Can I Create Dynamically Sized Arrays in C to Handle Files of Unknown Size?

Tasusunan Bersaiz Dinamik dalam Bahasa C

Pertimbangkan kod C berikut:


int siz = 0;
int n = 0;
FILE* gambar;

gambar = fopen("test.jpg", "r");
fseek(gambar, 0, SEEK_END );
siz = ftell(gambar);

char Sbuf[siz]; // Ralat: Tatasusunan panjang boleh ubah
fseek(gambar, 0, SEEK_SET);
sementara (!feof(gambar)) {

n = fread(Sbuf, sizeof(char), siz, picture);
// do stuff with the buffer
// memset(Sbuf, 0, sizeof(Sbuf));

}

Dalam kod ini, matlamatnya adalah untuk membaca kandungan fail ke dalam penimbal, tetapi saiz penimbal tidak diketahui sehingga fail dibuka dan saiznya ditentukan. Walau bagaimanapun, bahasa C tidak membenarkan mengisytiharkan tatasusunan dengan panjang berubah-ubah.

Alternatif kepada Tatasusunan Panjang Boleh Ubah

Untuk menangani isu ini, terdapat beberapa alternatif:

  • std::vector: Gunakan Pustaka Templat Standard (STL) C untuk mencipta tatasusunan dinamik.

    std::vector Sbuf;

Sbuf.push_back(someChar);

  • Peruntukan Dinamik: Gunakan operator baharu untuk memperuntukkan memori pada masa jalan untuk tatasusunan.
    <br>char* Sbuf = char[siz] baharu;</li></ul>
    <p>padam [] Sbuf; // Agihkan memori apabila selesai<br>

    Pertimbangan

    Walaupun peruntukan dinamik menyediakan cara untuk mencipta tatasusunan bersaiz pembolehubah, ia disertakan dengan beberapa kaveat:

    • Peruntukan memori mesti diuruskan dengan betul untuk mengelakkan kebocoran memori.
    • Operasi aritmetik tidak boleh dilakukan terus pada indeks tatasusunan, kerana ia adalah penunjuk.
    • Penyusun yang berbeza mungkin melaksanakan tatasusunan panjang ubah secara berbeza, yang membawa kepada isu keserasian.

    Kesimpulan

    Walaupun tatasusunan panjang ubah tidak disokong dalam C , terdapat beberapa pendekatan alternatif yang tersedia untuk mencipta tatasusunan dinamik yang boleh menyesuaikan diri dengan saiz data yang akan disimpan. Adalah penting untuk memilih pilihan yang paling sesuai berdasarkan keperluan khusus dan kekangan projek.

    Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Tatasusunan Bersaiz Dinamik dalam C untuk Mengendalikan Fail Saiz Tidak Diketahui?. 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