疑問点
dog.txtの"dog"を"rabbit"に置換してrabbit.txtに書き込むプログラムを作成しています。
まず、dog.txtの文字列をfgetsで読み込みbufrに格納します。その後、bufwにbufrの配列をコピーします。
そして、bufrの中から"dog"を探しそのアドレスをpに格納するというところまでは自力で理解できました。
その後、if(p)のブロックが置換のプログラムだと思うのですが、何をしているのかがわかりません。どういった操作が行われているのでしょうか?
特にq = bufw + (p - bufr); strcpy(q + strlen(str2), p + strlen(str1));のコードがわかりません。
加えて、このプログラムをそっくりそのまま実行してもrabbit.txtには書き込みがされませんでした。
該当のソースコード
C
#include <stdio.h> #include <string.h> int main(void) { FILE *fpr, *fpw; //読み書きファイルポインタ char bufr[256], bufw[256]; //読み書きバッファ char str1[] = "dog"; char str2[] = "rabbit"; char *p, *q; fpr = fopen("dog.txt", "r"); if (fpr == NULL) { printf("file open error!\n"); return 1; } fpw = fopen("rabbit.txt", "w"); if (fpw == NULL) { printf("file open error!\n"); return 1; } do { fgets(bufr, 256, fpr); strcpy(bufw, bufr); //bufwに読み込んだデータを格納 p = strstr(bufr, str1); //bufrの中からstr1=dogを探索 if (p) { q = bufw + (p - bufr); //疑問点 strcpy(q, str2); //疑問点 strcpy(q + strlen(str2), p + strlen(str1));//疑問点 } fprintf(fpw, "%s", bufw); if (feof(fpr)) break; } while (1); fclose(fpr); fclose(fpw); return 0; }
dog.txt
The dog Mr.Tanaka has is so ugly.
まだ回答がついていません
会員登録して回答してみよう