看来,如果您正在测试memcpy(),您不应该知道它的代码——或者至少,不要假设它memcpy()总是如图所示实现。你的测试需要挑战memcpy()假设它可能已经开始,但可能会随着时间的推移而变化。
测试中缺少的一个重要方法是部分重叠dst和src.
extern void *memcpy(void * dst, const void *src, size_t n);
char buf[50] = {0} ;
strcpy(&buf[5], "1234567890";
memcpy(buf, &buf[5]);
// what is the result?
char buf2[50] = {0} ;
strcpy(&buf2[0], "1234567890";
memcpy(&buf2[5], buf2);
// what is the result?
奇数指针值的测试用例。一些平台对指针对齐有限制。一个好的memcpy()应该考虑到这一点,而不是分段。过错。所以我也会测试一些未对齐的指针。
恕我直言,存在具有各种填充的深奥平台。只是注意到这里。
如果NULL != 0,memcpy(dst, 0, 1) 应该工作而不是段错误。
最后一个古怪的测试:(不确定如何实现。)确保src和dst没有在分配的范围之外  被访问。memcpy(dst, src, 1)没有做类似的事情uint32_t t = *((uint32_t*) src)。因为即使只有 LSByte oft可能被写入dst,在其范围之外的访问也是src禁止的。
您可以进行一些性能测试(速度),但我假设这是一个简单的功能测试套件。
注意:一些非常规操作系统已size_t签名。(我认为他们不合规)
顺便说一句:static很好奇memcpy(void * dst, static void *src ...,它会导致编译器错误。假设你想要memcpy(void * dst, const void *src ...