首頁 > 後端開發 > C++ > 如何在 C 中建立動態大小的陣列來處理未知大小的檔案?

如何在 C 中建立動態大小的陣列來處理未知大小的檔案?

Barbara Streisand
發布: 2024-11-14 20:59:02
原創
1038 人瀏覽過

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

C 語言中的動態大小數組

考慮以下C 程式碼:

<br>考慮以下C 程式碼:<br><br><pre class="brush:php;toolbar:false">int大小= 0;<p>int n = 0;<br>FILE*圖片;<br></p>圖片= fopen("test.jpg", "r");<p>fseek(圖片, 0, SEEK_END);<br>siz = ftell(圖片);<br></p>char Sbuf[大小]; // 錯誤:變長數組<pre class="brush:php;toolbar:false">n = fread(Sbuf, sizeof(char), siz, picture);
// do stuff with the buffer
// memset(Sbuf, 0, sizeof(Sbuf));
登入後複製
fseek(picture, 0, SEEK_SET);

while (!feof(picture)) {

}

;

在這段程式碼中,目標是將檔案的內容讀入緩衝區,但緩衝區的大小未知直到檔案開啟並確定其大小。然而,C 語言不允許聲明可變長度數組。

可變長度數組的替代方案

  • 要解決這個問題,有幾個替代方案:

    std: :vector
  • :使用C 標準範本庫(STL) 建立動態數組。
<p>std::vector<char>; sbuf;<br></char></p>
登入後複製
    Sbuf.push_back(someChar);


  • 動態分配
  • :使用new運算子進行指派運算時的記憶體array.
<p>char* Sbuf = new char[siz];<br></p><p>delete [] Sbuf; //完成後釋放記憶體<strong></strong></p>注意事項<p></p>
登入後複製
    雖然動態分配提供了一種建立可變大小數組的方法,但它附帶一些注意事項:
  • 必須正確管理記憶體分配以避免記憶體佔用洩漏。
  • 陣列的索引不能直接進行算術運算,因為它是指標。
不同的編譯器可能以不同的方式實現變長數組,從而導致相容性問題。

結論

雖然長度可變C 不支援數組,但有幾種替代方法可用於建立可以適應要儲存的資料大小的動態數組。必須根據項目的特定要求和限制來選擇最合適的選項。

以上是如何在 C 中建立動態大小的陣列來處理未知大小的檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板