logo

C の size_t データ型とは何ですか?

サイズ_t は、次のようなさまざまなヘッダー ファイルで定義される符号なし整数データ型です。

, , , , ,>

これはオブジェクトのサイズをバイト単位で表すために使用される型であり、したがって、 のサイズ オペレーター 。ホスト システムが処理できる最大のオブジェクトのサイズを含めるのに十分な大きさであることが保証されています。基本的に、最大許容サイズはコンパイラによって異なります。コンパイラが 32 ビットの場合、それは単なる typedef (つまりエイリアス) です。 符号なし整数 ただし、コンパイラが 64 ビットの場合、それは次の typedef になります。 符号なし 長い長い 。の サイズ_t データ型が負になることはありません。
したがって、多くの C ライブラリ関数は次のようなものになります。 malloc、memcpy、strlen 引数と戻り値の型を次のように宣言します。 サイズ_t 。例えば、



C






文字列を整数に変換する



// Declaration of various standard library functions.> // Here argument of 'n' refers to maximum blocks that can be> // allocated which is guaranteed to be non-negative.> void>*>malloc>(>size_t> n);> // While copying 'n' bytes from 's2' to 's1'> // n must be non-negative integer.> void>*>memcpy>(>void>* s1,>void> const>* s2,>size_t> n);> // strlen() uses size_t because the length of any string> // will always be at least 0.> size_t> strlen>(>char> const>* s);>

>

>

サイズ_t または、ループ変数は通常 0 以上であるため、任意の符号なし型がループ変数として使用される可能性があります。
注記: を使用するときは、 サイズ_t オブジェクトを使用する場合は、算術を含め、それが使用されるすべてのコンテキストで、負でない値のみが必要であることを確認する必要があります。たとえば、次のプログラムは間違いなく予期しない結果をもたらします。

例1

C




// C program to demonstrate that size_t or> // any unsigned int type should be used> // carefully when used in a loop.> #include> #define N 10> int> main()> {> >int> a[N];> >// This is fine.> >for> (>size_t> n = 0; n a[n] = n; } // But reverse cycles are tricky for unsigned // types as they can lead to infinite loops. for (size_t n = N - 1; n>= 0; --n) printf('%d ', a[n]); }>>

>

int型の文字列
>

  Output  Infinite loop and then segmentation fault>


例 2

  • C の size_t データ型は、オブジェクトのサイズをバイト単位で表すために使用される符号なし整数型です。これは stddef.h ヘッダーで定義されており、配列、メモリ ブロック、文字列のサイズを表すためによく使用されます。
  • 以下は、size_t の使用法を示すプログラム例です。

C




#include> #include> int> main()> {> >int> array[5] = { 1, 2, 3, 4, 5 };> >size_t> size =>sizeof>(array);> >printf>(>'The size of the array is: %lu '>, size);> >return> 0;> }>

>

>

  • このプログラムでは、配列のサイズをバイト単位で格納するために size_t が使用されます。
  • sizeof 演算子は配列のサイズを決定するために使用され、そのサイズは size_t 型のサイズ変数に格納されます。 %lu 形式指定子は、符号なし長整数である size_t の値を出力するために使用されます。
  • プログラムは、「配列のサイズは 20」と出力します。これは、配列が占めるバイト数です (5 要素 * 要素あたり 4 バイト)。

C プログラミングで size_t を使用する利点:

  • 携帯性 注: size_t データ型は、C 標準ライブラリの一部である stddef.h ヘッダーで定義されています。 size_t を使用すると、コードがさまざまなプラットフォームやコンパイラ間で移植可能であることを保証できます。
  • 署名なし : size_t は符号なし整数型です。つまり、符号なし整数の最大サイズまでのサイズを表現できます。サイズが負になることはないため、これは配列やメモリ ブロックを扱うときに便利です。
  • パフォーマンス : size_t は通常、高速で効率的な整数型として実装され、これを使用すると、他の整数型を使用するよりもパフォーマンスが向上します。
  • 明確な意図: size_t を使用すると、他のタイプの整数ではなくサイズを扱っていることがコードの読者に明確になります。これにより、コードが理解しやすくなり、エラーが発生しにくくなります。
  • 標準化 : size_t を使用すると、広く使用され受け入れられている標準に従っていることになり、コードが他のプログラマにとって読みやすく保守しやすくなります。
  • 相互運用性 : size_t は多くのライブラリや API で広く使用されており、コード内で使用すると他のコードと簡単に統合できます。