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

指针方式实现隔位字符复制函数的numChars限制失效问题

问题分析与修复方案

原函数的核心问题出在循环条件和逻辑判断上,导致无法正确限制复制的字符数量:

原代码的关键错误

  • 循环条件destination < numChars + destination完全无效,因为numChars为正整数时,这个不等式永远成立,根本起不到限制复制数量的作用。
  • 循环开头判断*destination != '\0'毫无意义,目标数组初始化后可能不是以'\0'开头,而且我们是主动往里面写内容,不需要判断这个。
  • 当source到末尾时的处理逻辑错误,else块里先destination++再赋值'\0',会导致目标指针偏移错误,还可能越界。

修复后的代码

void copyWord(char * destination, const char * source, int numChars) {
    // 保存目标起始地址,用于计算已复制的字符数
    char *dest_start = destination;
    // 循环条件:未达到指定复制数量,且source未到末尾
    while ((destination - dest_start) < numChars && *source != '\0') {
        *destination = *source;
        destination++;
        source += 2;
    }
    // 最后添加字符串终止符,确保目标是合法的C字符串
    *destination = '\0';
}

修复说明

  • 用dest_start记录目标数组的起始位置,通过destination - dest_start计算已经复制的字符数,确保不超过numChars的限制。
  • 循环同时判断两个条件:复制数量未达标,且source还有字符可以读取,任意一个不满足就终止循环。
  • 循环结束后直接在当前目标指针位置写入'\0',保证目标字符串的合法性,不管是复制满了numChars个字符,还是source提前耗尽。

测试验证

  • 当source为"Hello",numChars设为2时,复制得到"Hl",符合需求。
  • 当source为"Hello There",numChars设为3时,会复制"Hlo",不会超出限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:57:10