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

能否通过指针在C++中使用strcpy预防缓冲区溢出?

能否通过指针实现的strcpy在C++中预防缓冲区溢出?

你给出的这个指针版strcpy实现,确实可以有效预防缓冲区溢出。

核心原因分析

这段代码通过两个关键约束避免了越界写入:

  • 循环同时检查i < bufferSize(不超过缓冲区上限)和*source != 0(源字符串未结束),任一条件不满足就停止复制
  • 循环结束后主动给目标缓冲区写入终止符\0,保证目标是合法的C风格字符串,不会出现未终止导致的后续错误

代码细节说明

你实现的函数逻辑清晰,用指针移动的方式完成复制,和下标访问的本质逻辑一致,这里的指针操作完全没问题:

void strcpy(char *destination, char *source, int bufferSize) { 
    int i = 0;
    while (i < bufferSize && *source != 0) { 
        *destination = *source;  
        destination += 1;
        source += 1;
        i += 1;
    }

    *destination = 0;
}
char *text = "Tomek";
char buffer[1024];

strcpy(buffer, text, 1024);

额外注意事项

  • 必须保证传入的bufferSize是目标缓冲区的实际可用大小,如果传入值大于缓冲区真实长度,依然会有溢出风险
  • 标准库中有类似的安全函数(比如strncpy),但strncpy存在一个坑:如果源字符串长度等于缓冲区大小,不会自动添加\0,需要手动处理,你的实现在这一点上更安全
  • 在C++项目中,更推荐直接使用std::string来管理字符串,它会自动处理内存分配和边界检查,从根源上避免缓冲区溢出这类问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:32:37