【问题标题】:strstr() always returns null [duplicate]strstr() 总是返回 null [重复]
【发布时间】:2015-12-06 15:55:25
【问题描述】:

我正在开发一个想要在字符串中找到匹配项的程序。我正在使用strstr() 函数来完成工作,但它的行为很奇怪。 我使用fgets() 读取字符串,然后使用strstr() 查找匹配项,但如果字符串与匹配项不完全相同,它总是返回null。

例如:

>string to search match in : This is testing environment
>match  : test
>returns : (null)

>string to search match in : test
>match  : test
>returns : test

为什么会这样?我可以解决这个问题吗?

【问题讨论】:

标签: c string fgets strstr


【解决方案1】:

使用以下方法

char *p = strchr( match, '\n' );
if ( p ) *p = '\0';

p = strstr( source, match );

【讨论】:

  • 或者只是做match[strcspn(match, "\n\r")] = '\0'; 来切断任何尾随的换行序列。
  • 既然换行总是在最后,而且通常情况下它会在那里(换行不存在是例外情况)为什么不使用strrchr?或者只是检查最后一个字符? :)
  • @JoachimPileborg 为什么要搜索换行符的最后一次出现而不是第一次出现?:)
  • 因为fgets 只会在字符串中放置一个换行符,并且如果它在那里,它将始终是最后一个。当你知道它在哪里(如果它在那里)时,不需要搜索整个字符串。
  • @JoachimPileborg 还有什么?您将如何使用 strrchr 指定字符串的地址来查找第一次出现的字符?
猜你喜欢
  • 2011-02-17
  • 2019-08-05
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
相关资源
最近更新 更多