みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

文字列の検索

プログラミングの勉強の際に下のプログラムを作りました。
最初にある文字列を入力して、その後別の文字列を入力して、
後に入力した文字列が最初に入力した文字列に含まれていれば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;
}

投稿日時 - 2008-10-27 11:17:01

QNo.4433291

困ってます

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

↓この部分何しています?
c,dともに未初期化のポインタですから
実行時にエラーですね

char *mystrfin(char *a,char *b){
char *c,*d;
while(*c!='\0'){ <=== 特にここ

投稿日時 - 2008-10-27 11:56:31

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

> コンパイルは通るのですが

本当ですか?

> *mystrfin(c,d);

main関数で変数cもdも定義していないので、
コンパイル時にエラーが出ます。

投稿日時 - 2008-10-27 18:10:07

補足

#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が無限にでてきます・・・
なぜでしょう・・・

投稿日時 - 2008-10-27 18:32:05

あなたにオススメの質問