関数strcasestrがどのように機能するかを確認する小さなプログラムを作成しています。
以下のコードは何をしますか:
ユーザーにテキスト行を入力するように求めます。
最初の入力blah bla blah blah the Word we are looking for.
例: 2 番目の入力例:Word
プログラムが出力するものは次のとおりです。
Word we are looking for.
しかし、Segmentation fault (core dumped) エラーが表示されます。
fgets()
間違った使い方をしている疑いがあります。入力を読み取るために使用するプログラムを実行するとscanf
(もちろん、スペースなしで最初の入力を入力します)、プログラムが機能し、期待される出力が得られます。
セグメンテーション違反エラーの原因は何ですか? これを修正する方法は?
#define _GNU_SOURCE
#define max_buff 1000
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
char *answer;
//char * strcasestr (const char *haystack, const char *needle);
void strip_crlf(char* s);
void strip_crlf(char* s)
{
char* p = strpbrk(s, "\r\n");
if (p) *p = '\0';
}
int main(){
char fname[max_buff+1];
char lname[max_buff+1];
printf("Enter the line of text you are searching for ");
//scanf("%s", fname);
fgets(fname,max_buff,stdin);
//printf("%s",fname);
strip_crlf(fname);
printf("Enter the search term ");
//scanf("%s", lname);
fgets(lname,max_buff,stdin);
strip_crlf(lname);
//printf("%s",lname);
if((answer=strcasestr(fname,lname))!=NULL){
// printf("now we have something in answer ");
printf("%s\n",answer);
}
else
printf(" strcasestr failed\n");
}
編集済み: 以下のコメント/回答で行われた提案を反映するため。プログラムは次のように出力します。
strcasestr failed
...うーん。
Edit2: プログラムが動作するようになりました。皆様、ご協力ありがとうございました!