gpt4 book ai didi

c - 测试 memcpy 函数

转载 作者:太空宇宙 更新时间:2023-11-04 03:53:24 35 4
gpt4 key购买 nike

void *memcpy(void * dst, static void *src, size_t n)
{
Char*ret;

if (dst == NULL || src == NULL)
return NULL;

ret = dst;

While(n--)
{
*(char*) dst++ = *(char*) src++;
}

return ret;
}

我有一些方法可以测试:

  1. if(dst==NULL || src==NULL)
  2. n=0; n=1; n=65535;
  3. 输入 (int,char ,float,double,class);

会不会有更多方法?

最佳答案

看来,如果您正在测试 memcpy(),您应该知道它的代码 - 或者至少,不要假设 memcpy( ) 将始终如图所示实现。您的测试需要挑战 memcpy(),假设它可能已经如图所示开始,但可能会随着时间的推移而变化。


测试中缺少的一个重要方法是部分重叠 dstsrc

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() 应该考虑到这一点,而不是 seg。过错。所以我也会测试一些未对齐的指针。

恕我直言,存在具有各种填充的深奥平台。只是在这里注意到这一点。


如果 NULL != 0memcpy(dst, 0, 1) 应该 工作而不是段错误。


最后一个古怪的测试:(不确定如何实现。)确保 srcdst 没有被访问 超出了他们的分配范围。 memcpy(dst, src, 1) 没有做类似 uint32_t t = *((uint32_t*) src) 的事情。因为即使只有 t 的 LSByte 可能被写入 dstsrcaccess 超出其范围也是一个不,不。


您可以进行一些性能测试(速度),但我假设这是一个简单的功能测试套件。


注意:某些非常规 操作系统的 size_t 已签名。 (我认为他们不合规)

顺便说一句:staticmemcpy(void * dst, static void *src ... 中很好奇,它会导致编译器错误。假设你想要memcpy(void * dst, const void *src ...

关于c - 测试 memcpy 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19063815/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com