You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言自定义strstr()函数执行无结果,请求排查修复

问题分析与修复

你的代码存在两个关键问题,直接导致程序无输出:

1. 外层循环触发死循环

在ft_strstr的外层while(*str)循环中,当*str != *b时,你用continue直接跳回循环判断,但没有对str执行自增操作。这会让str指针永远停在当前位置,程序陷入死循环,根本无法走到main函数的printf语句。

2. main函数未正确处理返回值

即使ft_strstr能正常返回结果,你也没有保存或打印该返回值,反而直接打印find数组的内容,这完全不是你需要的匹配结果输出。


修复后的完整代码

#include <stdio.h>

char* ft_strstr(char *str, char *to_find) {
  char *a;
  char *b;

  b = to_find;
  if (!*b)
    return (char*) str;
  while (*str) {
    // 不匹配时先自增指针,避免死循环
    if (*str != *b) {
      str++;
      continue;
    }
    a = str;
    b = to_find; // 每次检查匹配前重置b指针,修正原代码的逻辑漏洞
    while (1) {
      if (!*b)
        return (char*) str;
      if (*a++ != *b++)
        break;
    }
    str++;
  }
  return (NULL);
}

int main() {
  char string[] = "Hello from morroco";
  char find[] = "from";
  // 保存并处理函数返回值
  char *result = ft_strstr(string, find);
  if (result) {
    printf("匹配结果:%s\n", result);
  } else {
    printf("未找到匹配内容\n");
  }
  return 0;
}

额外优化说明

  • 原代码中,内层循环结束后才重置b = to_find,但正确逻辑应该是每次开始检查匹配前就重置b,避免之前的匹配失败导致b指针位置错乱。
  • 若想让函数贴合标准库strstr的行为,可以将参数改为const char* str, const char* to_find,同时调整内部指针类型,这样函数可以接收常量字符串。

内容的提问来源于stack exchange,提问作者Omar Ghazi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 19:25:34