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
相关产品推荐
相关产品推荐

