• ベストアンサー

文字列の検索

プログラミングの勉強の際に下のプログラムを作りました。 最初にある文字列を入力して、その後別の文字列を入力して、 後に入力した文字列が最初に入力した文字列に含まれていれば1、 含まれていなければ0と表示するプログラムです。 コンパイルは通るのですが、文字列を2つ入力すると 「セグメンテーション違反です」と表記されます… どこが悪いのでしょうか? どなたか解説・指摘・模範解答などおねがいします。 (使用するのは#include<stdio.h>のみ、ポインタ変数必須です) #include<stdio.h> char *mystrfin(char *a, char *b); int main(void) { char str1[100],str2[100]; printf("1>>"); fgets(str1,100,stdin); printf("2>>"); fgets(str2,100,stdin); *mystrfin(c,d); } char *mystrfin(char *a,char *b){ char *c,*d; while(*c!='\0'){ c=a; d=b; while(*c!='\0' && *d!='\0') if(*c!=*d) printf("0"); break; c++; d++; } if(*d='\0') printf("1"); a++; return a; return NULL; }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

↓この部分何しています? c,dともに未初期化のポインタですから 実行時にエラーですね char *mystrfin(char *a,char *b){ char *c,*d; while(*c!='\0'){ <=== 特にここ

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

> コンパイルは通るのですが 本当ですか? > *mystrfin(c,d); main関数で変数cもdも定義していないので、 コンパイル時にエラーが出ます。

346mouse
質問者

補足

#include<stdio.h> char *mystrfin(char *a, char *b); int main(void) { char *c,*d; char str1[100],str2[100]; printf("1>>"); fgets(str1,100,stdin); printf("2>>"); fgets(str2,100,stdin); *mystrfin(c,d); } char *mystrfin(char *a,char *b){ char *c,*d; while(c!='\0'){ c=a; d=b; while(c!='\0' && d!='\0'){ if(c!=d) printf("0"); break; c++; d++; } } if(d='\0') printf("1"); a++; return a; return NULL; } 2つの回答を参考に少し修正しました。 今度は2つ文字列を入力した後0が無限にでてきます・・・ なぜでしょう・・・

関連するQ&A