疑問点
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
1#include <stdio.h> 2#include <string.h> 3 4int main(void) 5{ 6 FILE *fpr, *fpw; //読み書きファイルポインタ 7 char bufr[256], bufw[256]; //読み書きバッファ 8 char str1[] = "dog"; 9 char str2[] = "rabbit"; 10 char *p, *q; 11 12 fpr = fopen("dog.txt", "r"); 13 if (fpr == NULL) 14 { 15 printf("file open error!\n"); 16 return 1; 17 } 18 19 fpw = fopen("rabbit.txt", "w"); 20 if (fpw == NULL) 21 { 22 printf("file open error!\n"); 23 return 1; 24 } 25 26 do 27 { 28 fgets(bufr, 256, fpr); 29 strcpy(bufw, bufr); //bufwに読み込んだデータを格納 30 p = strstr(bufr, str1); //bufrの中からstr1=dogを探索 31 32 if (p) 33 { 34 q = bufw + (p - bufr); //疑問点 35 strcpy(q, str2); //疑問点 36 strcpy(q + strlen(str2), p + strlen(str1));//疑問点 37 } 38 fprintf(fpw, "%s", bufw); 39 40 if (feof(fpr)) 41 break; 42 43 } while (1); 44 45 fclose(fpr); 46 fclose(fpw); 47 return 0; 48} 49
dog.txt
1The dog Mr.Tanaka has is so ugly.
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2022/01/22 06:47