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

仅使用指针在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:50:52