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

新手重写strcat函数遇Visual Studio 2022解引用NULL指针警告

解决Visual Studio中strcat实现的空指针解引用警告

你的代码里编译器检测到当dest为nullptr时,循环里依然会尝试访问dest[i],这就是警告的来源。虽然你判断了dest不为nullptr时才计算destLen,但如果dest是nullptr,destLen会保持0,后续的循环还是会执行(i从0开始到srcLen),这时候解引用空指针是未定义行为,VS的静态代码分析提前捕捉到了这个风险。

修正方案:

  1. 开头先检查dest是否为nullptr,是的话直接返回——目标指针无效时根本无法完成追加操作。
  2. 统一变量类型,把j改成size_t,避免和i的类型不匹配。
  3. 简化逻辑,确保只有在dest和src都有效的情况下才执行复制。

修正后的代码:

void strCat(char* dest, const char* src) {
    // 先校验两个指针有效性,任一为空直接返回
    if (dest == nullptr || src == nullptr) {
        return;
    }

    size_t destLen = 0;
    // 手动计算目标字符串长度(避免依赖自定义的strLen)
    while (dest[destLen] != '\0') {
        destLen++;
    }

    size_t j = 0;
    // 追加src内容,包括终止符
    while (src[j] != '\0') {
        dest[destLen + j] = src[j];
        j++;
    }
    // 确保字符串末尾的终止符(src的终止符已被复制,此处可省略,写出来更严谨)
    dest[destLen + j] = '\0';
}

关键说明:

  • 标准库strcat要求dest必须是指向足够大的可修改内存的有效指针,不能为nullptr,所以开头直接判断dest为空就返回是符合逻辑的。
  • 用while循环计算长度比调用自定义strLen更直观,也避免了额外函数调用的潜在问题。
  • 复制时直接用dest[destLen + j]定位到dest末尾,逻辑更清晰易懂。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:47:14