1.该题目看似简单,但要考虑以下两点
(1) 接口设计的通用性
(2)需要考虑内存重叠的情况
以下为代码:
- void mymemcpy(void *dst, const void *src, size_t num)
- {
- assert((dst != NULL) && (src != NULL));
- const char *psrc = (const char*) src;
- char* pdst = (char*)dst;
- if (pdst > psrc && pdst < psrc + num) //如果内存发生重叠,需要进行倒序拷贝
- {
- for (int i = num - 1;i != -1; --i)
- {
- pdst[i] = psrc[i];
- }
- }
- else
- {
- for (size_t i = 0;i < num;i++)
- {
- pdst[i] = psrc[i];
- }
- }
- }