memmove_s函数是为增强安全性设计的,原型包含更多参数。memmove_s的原型为errno_t memmove_s(void dest, rsize_t destsz, const void src, size_t count) 。它在memmove基础上增加了对目标缓冲区大小的检查。destsz参数指定目标缓冲区的大小,防止缓冲区溢出。如果目标缓冲区大小不足,memmove_s会返回错误代码。
34 memmove函数,考虑了内存重叠的情况 35 */ 36 //src可以不保留 37 void*memmove(void*dst,constvoid*src,size_t count) 38 { 39 byte*pbTo=(byte*)dst; 40 byte*pbFrom=(byte*)src; 41 assert(dst!=NULL&&src!=NULL);//不能存在空指针 42 if(dst<=src||pbTo>=pbFrom+count)// 43 { 44...
这就是memmove的优势所在。我们分情况即可解决。 代码实现: voidmemmove(void*dst,constvoid*src,size_t count){assert(dst);assert(src);char*dst_=(char*)dst;char*src_=(char*)src;if(dst_>src_&&dst<dst_+count){while(count--){*(dst_+count)=*(src_+count);dst_++;src_++;}}else{while(c...