C で動的にサイズ変更された配列を作成して、不明なサイズのファイルを処理するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-14 20:59:02
オリジナル
962 人が閲覧しました

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

C 言語の動的サイズ配列

次の C コードを考えてみましょう:

<br>int siz = 0;<br>int n = 0;<br>FILE* 画像;</p>
<p>画像 = fopen("test.jpg", "r");<br>fseek(画像, 0, SEEK_END);<br>siz = ftell(画像);</p>
<p>char Sbuf[siz]; // エラー: 可変長配列<br>fseek(picture, 0, SEEK_SET);<br>while (!feof(picture)) {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">n = fread(Sbuf, sizeof(char), siz, picture);
// do stuff with the buffer
// memset(Sbuf, 0, sizeof(Sbuf));
ログイン後にコピー

}

このコードの目的は、ファイルの内容をバッファーに読み取ることですが、サイズはバッファのサイズは、ファイルが開かれてそのサイズが決定されるまで不明です。ただし、C 言語では、可変長の配列を宣言することはできません。

可変長配列の代替案

この問題に対処するには、次のような代替案がいくつかあります。

  • std::vector: C 標準を使用します動的配列を作成するためのテンプレート ライブラリ (STL)。
    <br>std::vector<char> Sbuf;</char>
    ログイン後にコピー

Sbuf.push_back(someChar);

  • 動的割り当て: 新しい演算子を使用して割り当てます実行時のメモリarray.
    <br>char* Sbuf = new char[siz];</li></ul>
    <p>delete [] Sbuf; // 完了したらメモリの割り当てを解除します<br>

    考慮事項

    動的割り当ては可変サイズの配列を作成する方法を提供しますが、それには次のような特徴があります。いくつかの注意点:

    • メモリを避けるために、メモリ割り当てを適切に管理する必要があります。リーク。
    • 配列のインデックスはポインタであるため、算術演算を直接実行することはできません。
    • コンパイラによって可変長配列の実装方法が異なる場合があり、互換性の問題が発生する可能性があります。

    結論

    可変長ですが配列は C ではサポートされていません。保存するデータのサイズに適応できる動的配列を作成するために利用できる代替アプローチがいくつかあります。プロジェクトの特定の要件と制約に基づいて、最も適切なオプションを選択することが重要です。

    以上がC で動的にサイズ変更された配列を作成して、不明なサイズのファイルを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート