簡體   English   中英

在C中使用fgets時出錯

[英]Error while using fgets in C

我正在編寫一個小程序來檢查功能strcasestr的工作方式。

下面的代碼做什么:

  1. 要求用戶輸入一行文本。
    第一個輸入示例: blah bla blah blah the Word we are looking for. 第二個輸入示例: Word

  2. 該程序應打印的內容是: Word we are looking for.

  3. 但這給了我一個分段錯誤(核心轉儲)錯誤。

我懷疑我使用的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM