11

ファイルポインタの現在の行位置を取得するにはどうすればよいですか?

4

3 に答える 3

14

現在の行を提供する機能はありません。ただし、 ftell関数を使用して、ファイルの先頭からの文字数でオフセットを取得できます。

于 2010-03-28T15:42:40.477 に答える
5

現在の行を取得する関数はありません。自分で追跡する必要があります。このようなもの:

FILE *file;
int c, line;

file = fopen("myfile.txt", "rt");
line = 0; /* 1 if you want to call the first line number 1 */
while ((c = fgetc(file)) != EOF) {
    if (c == '\n')
        ++line;
    /*
        ... do stuff ...
    */
}
于 2010-03-28T15:49:09.383 に答える
4

ファイル内の位置を取得するには、 ftellを使用する必要があります。

現在のが必要な場合は、ファイルの先頭と位置の間の行末記号シーケンスの数をカウントする必要があります。これを行う最善の方法は、おそらくファイルの先頭から開始し、その位置に到達するまで単純に順方向に読み、行末シーケンスをカウントすることです。

現在の行の位置が必要な場合(現在の行のどの文字を意味していると思います)、その位置の直前の行終端記号シーケンスと位置自体の間の文字数をカウントする必要があります。

これを行う最善の方法は (逆方向に読み取るのはあまり便利ではないため)、fseekを使用してその位置から一度にチャンクをバックアップし、チャンクをバッファーに読み取り、チャンク内の最後の行ターミネーター シーケンスを見つけて計算することです。その点と位置の違い。

于 2010-03-28T15:49:28.963 に答える