strstr()不在C上工作

时间:2014-10-09 20:05:23

标签: c linux coredump strstr

我有以下代码。问题是当我运行它时,它没有向我显示我搜索过的搜索内容;在中为尝试printf("%s", strstr(tracks[i], search_for)),返回null,但是对于 tracks [i] search_for 执行相同操作没有问题。请帮忙!

#include <stdio.h>
#include <string.h>

char tracks[][80]={
  "I left my heart in Harvard Med Scholl",
  "Newark, Newark - a wonderful town",
  "Dancing with a Dork",
  "From here to maternity",
  "The girl from Iwo Jima",
};

void find_track(char search_for[]){
  int i;
  for(i=0; i<5; i++){
    if(strstr(tracks[i], search_for)){
      printf("Track %i: '%s'\n", i, tracks[i]);
    }
  }
};

int main(){

  char search_for[80];
  printf("Search for: ");
  fgets(search_for, 80, stdin);
  find_track(search_for);
  return 0;
}

1 个答案:

答案 0 :(得分:4)

正如我们在fgets()文档中所看到的,如果行末尾有换行符,它将包含在生成的字符串中:

  

最多读取计数 - 给定文件流中的1个字符并将它们存储在str中。生成的字符串始终以NULL结尾。如果文件结束或找到换行符,则解析停止,在这种情况下str将包含该换行符。

所以在这种情况下,如果我们输入"Newark",那么我们有:

search_for[] = {'N', 'e', 'w', 'a', 'r', 'k', '\n', '\0', ...};

您需要删除该额外换行符。