strcpy和memcpy的区别

oneNeko 于 2020-07-27 发布

原型

char *strcpy(
   char *strDestination,
   const char *strSource
);
void *memcpy(
   void *dest,
   const void *src,
   size_t count
);

相似点

strcpy 和 memcpy 都是复制,头文件是<string.h><cstring>(C++),或<memory.h>(memcpy)

区别

安全调用

Strcpy函数将strSource(包括终止 null 字符)复制到strDestination指定的位置。 如果源和目标字符串重叠,则strcpy的行为是不确定的。
由于strcpy在复制strSource之前不检查strDestination中是否有足够的空间,因此它可能会导致缓冲区溢出。 因此,我们建议你使用 strcpy_s

在vs中,使用strcpy会报错,建议使用strcpy_s,防止溢出

strcpy_s原型:

errno_t strcpy_s(
   char *dest, //目标字符串地址
   rsize_t dest_size, //目标字符串大小,必须大于源字符串(包括终止字符)大小
   const char *src //源
);