查找字符串最后一次出现的位置

4

我想在一个字符串中找到最后出现的子串(该字符串未以NULL结尾)。被搜索的子串总是由4个字母组成。以下是我的尝试:

char * strrstr(char *string, char *find, ssize_t len)
{
  //I see the find in string when i print it 
  printf("%s", string);
  char *cp;
  for (cp = string + len - 4; cp >= string; cp--)
  {
    if (strncmp(cp, find, 4) == 0)
        return cp;
  }
  return NULL;
}

尽管我在字符串参数中看到了我要查找的子字符串,但它始终给我返回NULL。


2
你能给一个调用这个函数并得到错误结果的数据的 main 示例吗? - interjay
2
如果string没有被终止(严格来说,在C中它实际上不是一个字符串),你就不能像那样使用printf()打印它。 - unwind
@interjay 找到了原因。字符串被分配了5k的内存,而我一直只检查了前几个字节。 - MaMu
1个回答

3

我按照您的方式尝试了代码,成功地运行了它。

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

char * strrstr(char *string, char *find, ssize_t len)
{
  //I see the find in string when i print it 
  //printf("%s", string);
  char *cp;
  for (cp = string + len - 4; cp >= string; cp--)
  {
    if (strncmp(cp, find, 4) == 0)
        return cp;
  }
  return NULL;
}

int main() {
   char *ret = strrstr("kallelkallelkallelkallaa", "kall", 23);
   printf("%s", ret); //---> it prints: kallaa
   return 0;
}

您故意将 strlen("kallelkallelkallelkallaa")-1 作为第三个参数传入吗? - alk
如果needle字符数组位于haystack的末尾,则发布的答案将无法找到needle的最后一次出现,即strrstr()的第三个参数需要是对strlen()调用的返回值。 - user3629249

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接