微软开始建议禁用memcpy函数了,原因是因为该函数和strcpy、strncpy等函数一样,因为存在潜在的缓冲区溢出的风险。推荐使用的代替的函数是
memcpy_s(),在VC++ 2008的签名如下:
errno_t __cdecl
memcpy_s(
_Out_opt_bytecap_post_bytecount_(_DstSize, _MaxCount)
void * _Dst,
_In_ rsize_t _DstSize,
_In_opt_bytecount_(_MaxCount) const void * _Src,
_In_ rsize_t _MaxCount
);
在某人可能设定比实际分配更大的代码空间的时候,memcpy_s()没有memcpy()那样的安全弱点,所以不容易出错。
参见:http://www.infoq.com/cn/news/2009/05/memcpy-banned