C/C++のfseek()関数とは?ファイルポインタの移動方法を解説
C言語のfseek()関数は、ファイルポインタを任意の位置へ移動させるために使用されます。移動先は「オフセット(offset)」と「ストリーム(stream)」という引数で指定します。処理が成功した場合は0を返し、失敗した場合は0以外の値を返します。
fseek()の構文
int fseek(FILE *stream, long int offset, int whence)
各引数の説明
- stream − 対象となるファイルストリームを識別するためのポインタです。
- offset − 基準位置から何バイト移動するかを指定します。
- whence − オフセットを加算する基準位置を指定します。
whenceに指定できる定数
whenceには、以下のいずれかの定数を指定します。
- SEEK_END − ファイルの終端を基準とします。
- SEEK_SET − ファイルの先頭を基準とします。
- SEEK_CUR − 現在のファイルポインタの位置を基準とします。
fseek()の使用例
ここでは、fseek()を使ってファイルサイズを取得する例を紹介します。まず、以下の内容を持つ「demo.txt」というファイルを用意します。
This is demo text! This is demo text! This is demo text! This is demo text!
次に、実際のコードを見てみましょう。
サンプルコード
#include<stdio.h>
void main() {
FILE *f;
f = fopen("demo.txt", "r");
if(f == NULL) {
printf("\n Can't open file or file doesn't exist.");
exit(0);
}
fseek(f, 0, SEEK_END);
printf("The size of file : %ld bytes", ftell(f));
getch();
}実行結果
The size of file : 78 bytes
このコードでは、fopen()でファイルを読み込みモードで開き、fseek(f, 0, SEEK_END)によってファイルポインタをファイルの終端まで移動させています。その後、ftell()を使って現在のポインタ位置(=ファイル全体のバイト数)を取得することで、ファイルサイズを求めています。このようにfseek()は、ファイル内の特定位置へのジャンプやファイルサイズの取得など、さまざまな場面で活用できる便利な関数です。
-
C/C++のmemcpy()関数の使い方と実例解説
この記事では、C++ STLにおけるmemcpy()関数の動作、構文、および具体的な使用例について詳しく解説します。 memcpy()とは? memcpy()関数は、C++ STLに組み込まれた標準関数の一つで、<cstring>ヘッダーファイルで定義されています。この関数はメモリブロックをコピーするために使用され、あるメモリ位置から別のメモリ位置へ、指定されたバイト数分のデータを転送します。 関数の実行結果は、データのバイナリコピーとなります。重要な点として、memcpy()は終端のNULL文字やその他の終端記号をチェックしません。単純にソースから指定されたバイト数(num)をそ
-
C/C++で学ぶAA木(AA Tree)とは?基本概念と平衡化操作を徹底解説
AA木(AA Tree)とはコンピュータサイエンスにおいて、AA木(AA Tree)とは、順序付きデータを効率的に格納・検索するために実装された平衡木(バランスドツリー)の一種です。AA木は、赤黒木(Red-Black Tree)の変種として扱われます。赤黒木は二分探索木の一形態であり、要素の追加や削除を効率的にサポートします。赤黒木と大きく異なる点は、AA木では赤いノードを右の子としてのみ追加でき、左の子としては配置できないという制約があることです。この制約により、2-3-4木ではなく2-3木をシミュレートすることになり、その結果、木の保守操作が大幅に簡素化されます。赤黒木の平衡化アルゴリズ