ここで行われているように、fputs を使用します。改行を認識するためには、コンテンツをループして改行文字 (Linux では「\n」) をカウントする必要があります。getcで現在指されている文字を取得できます。
これを実装する 1 つの方法は、次のように、指定された行の開始位置のバイト位置を返す関数を作成することです。
#include <stdio.h>
int getRowPos(int row,FILE* fp){
int pos=1,lines=1,currChr;
do{
currChr=getc(fp);
if(currChr=='\n')
lines++;
}while(lines<row && currChr!=EOF && ++pos);
return pos;
}
これを使用すると、列番号 (行のバイト番号) を加えfseek
た位置に移動し、次のように fputs を使用して目的のコンテンツを書き込むことができます。getRowPos
int row=wanted row
int col=wanted column
FILE * pFile;
//Open file for read and write
pFile = fopen ( "myfile.txt" , "rb+" );
int rowPos=getRowPos(row,pFile);
fseek ( pFile , rowPos+colPos , SEEK_SET );
fputs ( "my new content" , pFile );
fclose ( pFile );
行の幅がわかっている場合、たとえば n 幅の場合、lseek
への呼び出しの前にスキップ n バイトを追加できますgetc
。