プログラミング初心者です.
大学の課題で任意のテキストファイルの単語数をカウントすると同時にプログラム実行時に入力した単語の個数を出力させよ.というものが出されました.
ここでの単語の定義は空白文字のみを区切りとしたものとします.
ファイルを開き文字配列に格納する操作は習っていないので与えられているので,それ以外を作っています.初心者故にまとめて考えてもわからないのでとりあえずまず1行(ここではBUF)で考えてみて,全単語数と探したい単語数を表示するプログラムを考えています.色々調べながらやってとりあえず下記のものを作ってみたのですが実行時にセグメンテーションフォルトと表示され単語の入力のみで停止してしまします.何が原因であるかわかりやすく教えていただけるとありがたいです.また今回はポインタを習ってからの演習のため,ポインタは必ず用いなければなりません.
とりあえず自分の中のイメージではBUFの先頭を*bufとしてwhile文を使って1文字目から調べていき,if分岐を使って空白でないなら別途用意した文字配列woodにそのまま先頭から入れ,空白ならば(else if内)全単語数を1増やし,その中のif文でstrcmpを使い文字列woodが探したい文字列searchに等しければ目的の単語数を1増やし,最後に切り出すための配列woodを再利用するためにi=0とmemsetを使い初期化しています.
まだ用語などはあまりわからないのでできるだけわかりやすく教えてくれるとありがたいです
お願いします
C
1{ 2 char BUF[5120] = "this is a pen and pen pen"; 3 char *buffer = BUF; 4 char kensaku[20]; 5 char *p_kensaku = kensaku; 6 printf("探す英単語を入力して下さい\n"); 7 fgets(kensaku,sizeof(kensaku),stdin); 8 char wood[20] ; //切り出し用 9 char *p_wood = wood; 10 int i ,j = 0; //カウント変数 11 int search = 0; //目的の単語数 12 int count = 0; //全単語数 13 while(j < sizeof(BUF)) { 14 if(*(buffer + j) != ' ') { 15 wood[i] = *(buffer + j); 16 i++; 17 j++; 18 } else if(*(buffer + j) ==' ') { 19 wood[i] = '\0'; 20 count = count +1; 21 if(strcmp(p_kensaku,p_wood) == 0 ) { 22 search = search + 1; 23 } 24 memset(wood,'\0',20); 25 j++; 26 i=0; 27 } 28 } 29 printf("全単語数:%d\目的の単語数:%d",count,search); 30 31}```ここに言語を入力 32コード