ページ 11

関数を使った文字列の比較

Posted: 2012年11月10日(土) 12:13
by たかし
文字列を表す char型の配列a と b を受け取り、その2つの文字列が同じ文字列であれば1を返し、違う文字列であれば0を返す関数 を作りたいのですが、コンパイルするとエラーが出てしまいます。

以下が僕の作ってみたプログラムです。

コード:

#include <stdio.h>

int equal(char a[],char b[])
{
	int i;
	while(a[i]!=0)
	{
		if(a[i]!=b[i])
		{
			return(0);
		}
		i=i+1;
	}
	return(1);
}

int main (void)
{
	int answer;
	answer=equal("hello","ohayou");
	
	if(answer==1){
		printf("correct\n");
	}
	else{
		printf("miss\n");
	}



	return(0);


}
これをデバッグしてみたら、


Debug Error!

Program: ...cumens\visual studio
2010\Projects\ex4-3.c\Debug\ex4-3.c.exe
Module: ...cuments\cisual studio
2010\Projects\ex4-3.c\Debug\ex4-3.c.exe
File:

Run - Time Checked Failure #3 - The variable 'i' is being used without being initialized.

(Press Retry to debug the application)

とでてきてしまいます。

このプログラムに何かおかしいところがあるということでしょうか?
おかしなところがあれば教えていただきたいです。

現在の環境は以下のとおりです
OS:Windows 7 Home Premium
コンパイラ:Microsoft Visual C++ 2010 Express



よろしくお願いします。

Re: 関数を使った文字列の比較

Posted: 2012年11月10日(土) 12:23
by softya(ソフト屋)
エラーメッセージのとおりです。
int i;
while(a!=0)
とプログラムが書いてありますがaのiは何番目を指しているでしょう?

あとこのプログラムは文字列の長さが同じじゃないとバグります。

Re: 関数を使った文字列の比較

Posted: 2012年11月10日(土) 15:53
by たかし
softya(ソフト屋) さん、ご指摘ありがとうございます。
さっそく、iに初期値0を与え、while文の条件もa!=0 かつ b!=0にしてプログラムを作りました。
(比較する文字列も変更しました。)
しかし、2つの文字列は違うものにしたのに帰ってくる値が1になってしまいました。
以下が改めて作ったプログラムです。

コード:

#include <stdio.h>	

int equal(char a[],char b[])
{
	int i;
	i=0;
	while(a[i]!=0 && b[i]!=0)
	{
		if(a[i]!=b[i])
		{
			return(0);
		}
		i=i+1;
	}
	return(1);
}

int main (void)
{
	int answer;
	answer=equal("These are also","These are also similar");

	if(answer==1){
		printf("correct\n");
	}
	else{
		printf("miss\n");
	}

	return(0);

}
なぜ返り値が0にならないのかわかりません。
たびたび申し訳ないのですが、教えていただけないでしょうか?

Re: 関数を使った文字列の比較

Posted: 2012年11月10日(土) 15:59
by softya(ソフト屋)
while(a!=0 && b!=0)
だとaかbのどちらかが文字列終端になるとreturn 1になります。
文字列の長さが違ったら、そもそもreturn 1はありえないのでは?