C++面试题更新 2026-08-05

在 C++ 开发中,strcpy 与 memcpy 这两个函数各自适用于什么场景?它们在功能、参数和安全性上有哪些主要差异?

风险判断技术原理C++

考察说明

考查对 C 标准库字符串与内存拷贝函数的理解,包括功能定位、参数差异及潜在风险。

回答思路

  1. 【回答框架 1】strcpy 用于以空字符结尾的字符串拷贝,根据源字符串的终止符确定拷贝长度,不指定拷贝字节数,目标缓冲区必须足够大且与源不重叠。
  2. 【回答框架 2】memcpy 用于任意内存块拷贝,按指定的字节数 n 进行复制,不关心内容是否为字符串,也不做重叠检查,需确保目标与源不重叠且空间足够。
  3. 【回答框架 3】安全性方面,strcpy 不检查目标容量,易发生缓冲区溢出,更推荐使用 strncpy 或更安全的替代;memcpy 的效率通常较高,但因不处理重叠,源与目标重叠时应改用 memmove。
  4. 【回答框架 4】使用场景上,strcpy 适合复制文本字符串,memcpy 适合复制结构体、数组等二进制数据,两者都要求目标缓冲区大小足够,且均不自动追加终止符。
  5. 【回答框架 5】从底层实现看,两者都是内存级复制,但 strcpy 按字节逐字符复制直到遇到 '\0',memcpy 按指定长度复制且可能采用更高效的块拷贝优化。
  6. 【关键点 1】strcpy 按源字符串的终止符决定拷贝长度,不指定字节数。
  7. 【关键点 2】memcpy 按显式字节数 n 拷贝任意内存块,不关心内容类型。
  8. 【关键点 3】两者都要求目标缓冲区足够大且源与目标不重叠,否则行为未定义。
  9. 【关键点 4】strcpy 存在溢出风险,memcpy 遇到重叠区域应改用 memmove。
  10. 【易错点 1】容易误以为 strcpy 会拷贝终止符之后的字节,实际上它只复制到并包含 '\0'。
  11. 【易错点 2】使用 memcpy 时忽略目标缓冲区大小导致越界,或复制包含指针的结构体造成浅拷贝问题。
  12. 【易错点 3】将两者混用,例如用 memcpy 复制字符串时未正确处理终止符,导致字符串不完整。