dポイントプレゼントキャンペーン実施中!

COMとユーザの対話型しりとりプログラムです。
コンパイルエラーは出ないのですが、実行すると動作が停止します。

問題は「しり文字と一致する単語(すべて日本語です)を辞書ファイル(txtファイル)から探す関数」
内にあることが分かっています。

------関数部分のみ-------
void Com_String(char *shiri_word){
char *p;

if((fpd=fopen(FILENAME,"r"))==NULL)puts("FILE OPEN ERROR");

while(fscanf(fpd,"%s",com_input_buf)!=EOF){
p=strstr(com_input_buf,shiri_word);
if(strcmp(p,com_input_buf)==0){break;}
else{p=NULL;}
}
fclose(fpd);
}
-------終---------
日本語のひらがな辞書ファイルなので、ややこしいことになってしまいました。
よろしくお願いします。

A 回答 (1件)

どこで「動作が停止」していてそのときに変数の値がどうなっているのかをデバッガを使って確認しましたか?



・fopen()に失敗したとき、"FILE OPEN ERROR"の文字を出力した後にwhileループを実行してしまいます
・strstr()で文字列が見つからなかったとき、pの値はNULLになります。その状態でstrcmp()を実行すると...
    • good
    • 0
この回答へのお礼

ありがとうございました。

以下のように修正するとうまくいきました。

------修正後------
void Com_String(char *shiri_word)
{
char *p=NULL;

if((fpd=fopen(FILENAME,"r"))==NULL){
puts("FILE OPEN ERROR");
exit(0);
}

while(fscanf(fpd,"%s",com_input_buf)!=EOF){
p=strstr(com_input_buf,shiri_word);
if(p==NULL){p='\0';}
else if(strcmp(p,com_input_buf)==0){break;}
}
fclose(fpd);

}
-----------------------

デバッガですが、もしよろければ使い方を教えて貰えますか。
調べてみたのですが、うまくいかないです。
コンパイラはgcc です。

gcc -g a.c
で実行ファイルを作って、
gdb a
'gdb'は内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチファイルとして認識されていません。
と出てしまいます。

お礼日時:2010/05/04 23:16

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