[英]Error while using fgets in C
我正在編寫一個小程序來檢查功能strcasestr的工作方式。
下面的代碼做什么:
要求用戶輸入一行文本。
第一個輸入示例: 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");
}
編輯:反映以下評論/答案中提出的建議。 該程序現在打印:
strcasestr failed
... Ughh。
Edit2:程序現在可以工作。 謝謝大家的幫助!
您不是要從strcasestr()
檢查失敗,因為失敗是因為您沒有從輸入中剝離\\n
或\\r\\n
。
唯一會成功的搜索是,如果它匹配第一個輸入的結尾。
剝離CRLF:
void strip_crlf(char* s)
{
char* p = strpbrk(s, "\r\n");
if (p) *p = '\0';
}
然后就是strip_crlf(fname);
fgets
。 與lname
相同。
在嘗試打印結果之前,您需要檢查比較是否成功:
if (answer) {
printf("%s\n", answer);
} else {
printf("No match\n");
}
比較失敗的原因可能是fgets()
在緩沖區中包含換行符,而scanf()
沒有。 如果您不希望它使比較混亂,則需要刪除字符串末尾的換行符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.