Я пишу небольшую программу, чтобы проверить, как работает функция strcasestr.Ошибка при использовании fgets в C
Что ниже код делает:
просит пользователя ввести строку текста.
Пример первый вход:blah bla blah blah the Word we are looking for.
Пример второй вход:Word
Что программа должна напечатать это:
Word we are looking for.
Но это дает мне ошибку сегментации (ядро сбрасывали) ошибки.
Я подозреваю, что неправильно использую 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");
}
EDITED: для отражения предложений, высказанных в комментариях/ответах ниже. программа теперь распечатывает:
strcasestr failed
... Ughh.
Edit2: программа работает сейчас. спасибо за вашу помощь всем!
FYI, вам не нужно 'max_buff + 1', так как' fgets() 'вычитает 1 из аргумента' size'. – Barmar
Вы проверили, что 'answer' не' NULL'? – Barmar
@Barmar ах yes.forgot, чтобы изменить его обратно b4, размещая i здесь. no i havnt. но strcasestr сделает это, только если он не сможет найти матч. с этими входами он должен быть в состоянии найти совпадение? – 3MIN3M