前提・実現したいこと
ある配列中にある文字列が何番目にあるのかを求める。
プログラム自体はできていて実行結果もあっているのですが、なぜそれであっているのかわかりません。
ch-pではなくなぜp-chなのでしょうか?
chが配列全体で、pが文字列が見つかった箇所からの配列であったら、ch>=pになりませんか?
また、sizeof(char)==1なので1に直してもできたのですが、そしたらsizeof(char)の存在意義ってなんですか?
初心者にもわかる詳しい説明お願いします。
発生している問題・エラーメッセージ
特になし
該当のソースコード
C
1#include <stdio.h> 2#include <string.h> 3 4int main(void) 5{ 6 FILE *fp = fopen("file.txt", "r"); 7 if (fp == NULL) { 8 perror("ファイルの読み込みに失敗\n"); 9 return 1; 10 } 11 char ch[20001]; 12 fscanf(fp, "%20000s", ch); 13 fclose(fp); 14 15 printf("▼=====テキストファイルの内容=====▼\n%s\n", ch); 16 17 printf("\nパターンを入力してください。*a,t,g,cのみ\n"); 18 char str[20001]; 19 scanf("%20000s", str); 20 21 int count1 = -1; 22 for (char *p = ch; p = strstr(p, str); p++){ 23 24 count1 =( p - ch ) / sizeof(char) + 1; /*←ここがなぜ合っているのか分からない*/ 25 26 27 printf(" パターン「\"%s\"」は%d番目からです。\n",str,count1); 28 29} 30 31 return 0; 32}
試したこと
実際にpとchの大きさを求めるプログラムを作ってみたのですがそれぞれ4と20001が出てきました。pがおかしい、、、
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/16 08:11
2021/01/16 08:22
2021/01/16 08:27