重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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

A 回答 (2件)

↓この部分何しています?


c,dともに未初期化のポインタですから
実行時にエラーですね

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

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



本当ですか?

> *mystrfin(c,d);

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

この回答への補足

#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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!