ホームページ >バックエンド開発 >C++ >標準 C で可変サイズの配列を宣言するにはどうすればよいですか?

標準 C で可変サイズの配列を宣言するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-15 22:57:03619ブラウズ

How Can I Declare an Array With a Variable Size in Standard C?

配列サイズが可変の C での動的配列割り当て

動的配列とも呼ばれる可変サイズの配列は、標準 C では課題となります。次のプログラムを考えてみましょう:

<br>int siz = 0;<br>int n = 0;<br>FILE* picture;</p>
<p>picture = fopen(" test.jpg", "r");<br>fseek(picture, 0, SEEK_END);<br>siz = ftell(picture);</p>
<p>char Sbuf[siz];<br>fseek(picture) 、0、SEEK_SET); //ファイルの先頭に移動<br>while (!feof(picture)) {</p>
<pre class="brush:php;toolbar:false">n = fread(Sbuf, sizeof(char), siz, picture);
/* ... do stuff with the buffer ... */
/* memset(Sbuf, 0, sizeof(Sbuf)); */

}

上記のコードは、変数 siz で決定されるサイズの文字の配列を割り当てます。ただし、標準 C では、配列サイズは定数でなければなりません。ここで疑問が生じます: コードのコンパイルを可能にするために、siz を正しく宣言するにはどうすればよいでしょうか?

残念ながら、標準 C では可変サイズの配列を直接宣言する方法はありません。ただし、いくつかの代替方法が存在します。

  • std::vector: 最新の C では、 std::vector コンテナーを配列の柔軟な代替手段として使用できます。これは任意のサイズに簡単に拡張でき、その使用法は比較的簡単です。
  • 新しい演算子: 新しい演算子を使用して、ヒープ上にメモリを動的に割り当てることができます。可変サイズの配列を作成するには、 char* Sbuf = new char[siz]; を使用できます。ヒープ上に siz 文字の配列を割り当てます。ただし、このアプローチではメモリ管理の問題 (潜在的なメモリ リークなど) が発生するため、std::vector.
よりも適していません。

以上が標準 C で可変サイズの配列を宣言するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。