C言語で、文章と英単語を入力し,大文字/小文字を区別せず英単語が文章中に含まれていれば,その旨を表示するプログラムを作成しなさい、という課題に取り組んでいます。
strlen,toupper(tolower),strncomp関数を必ず使わなければいけません。
strtok関数を使って半角スペースで文字列を区切って表示させるところまではできたのですがコアダンプというエラーが出て動かなくなってしまいます。
発生している問題・エラーメッセージ
egg apple
egg
ans0 = 2
Segmentation fault (コアダンプ)
該当のソースコード
c
1#include <string.h> 2#include <stdio.h> 3#include<stdio.h> 4#include<ctype.h> 5 6int main(void) 7{ 8 int str_len, word_len, n, ans; 9 char in_str[50] = {}; 10 char in_word[15]; 11 char large_str[50] = {}; 12 char large_word[15] = {}; 13 char *p, *w; 14 15 str_len = strlen(in_str); 16 word_len = strlen(in_word); 17 18 printf(">>"); 19 scanf("%[^\n]",in_str); 20 printf(">>"); 21 scanf("%[^\n]",in_word); 22 for(n = 0; n < str_len; n++) { 23 large_str[n] = toupper(in_str[n]); 24 } 25 for(n = 0; n < word_len; n++) { 26 large_word[n] = toupper(in_word[n]); 27 } 28 29 w = large_word; 30 p = strtok(large_str," "); 31 32 //1つ目のトークン表示 33 ans = strncmp(p, w, word_len); 34 if(ans == 0) 35 printf("Hit!!\n"); 36 puts(p); 37 38 //トークンがNULLになるまでループ 39 while(p!=NULL){ 40 41 //2回目以降は第一引数はNULL 42 p = strtok(NULL," "); 43 if(p!=NULL){ 44 ans = strncmp(p, w, word_len); 45 if(ans == 0) 46 printf("Hit!!\n"); 47 puts(p); 48 } 49 } 50 return 0; 51}
試したこと
c
1//1つ目のトークン表示 2 ans = strncmp(p, w, word_len); 3 if(ans == 0) 4 printf("Hit!!\n"); 5 puts(p);
ansへの代入の後にprintf関数を入れてansを表示させたところ、一回目のstrncmp関数で何が入ってきても0が代入されていました。
これでは比較できていないのでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/19 13:54
2021/05/19 14:47
2021/05/22 10:32