仅使用指针在C语言中查找字符串指定字符组的首次出现
问题分析与修复
你的代码存在以下关键问题导致无法正常运行:
- 内层循环中
vals指针会不断后移,每次外层循环时vals已经指向数组末尾,无法再正确遍历整个目标字符数组 - 找到匹配字符后没有立即返回当前的
begin指针,而是继续循环到begin等于end,最终返回的指针位置错误 - 冗余的
flag变量完全可以省略,直接在找到匹配时返回结果
修正后的代码
char const* find_any(char const *begin, char const *end, char const *vals, int len){ // 保存vals的原始起始地址,避免每次循环丢失指针位置 char const *vals_start = vals; while(begin != end){ // 每次检查新的字符时,重置vals到起始位置 vals = vals_start; int remaining = len; while(remaining > 0){ if(*begin == *vals){ // 找到匹配,直接返回当前begin指针 return begin; } vals++; remaining--; } begin++; } // 遍历完所有字符都没找到,返回NULL return NULL; }
关键修复点说明
- 用
vals_start保存目标字符数组的初始指针,确保每次检查新字符时都能从数组开头遍历 - 找到匹配字符立即返回当前的
begin,避免指针继续移动导致位置错误 - 用
remaining变量替代下标i,全程使用指针操作,符合要求 - 移除冗余的
flag变量,简化逻辑
内容的提问来源于stack exchange,提问作者blzy
相关产品推荐
相关产品推荐

