memccpy返回的内存地址低于src起始地址

时间:2015-06-27 22:23:29

标签: c libc

我有一个学校项目,我必须重新编码memccpy()函数。

我使用2个程序来检查我的代码是否正常工作。第一个是只有一个主要的小程序。 第二个程序由另一个学生开发(如果你想看到它,可以找到here

使用我的程序,没有问题,我的memccpy和原始函数都从dest指针返回右边字符的右指针。 但是对于第二个程序,原始函数返回一个比指针开始地址更低的指针地址,例如:

  • src值的起始地址:0x7fff712edc40
  • Memccpy返回指针地址:0x712edc44
  • 我的memccpy函数返回指针:0x7fff712edc44

因此,当有人在他的计算机上编译并且我的代码返回正确的地址时,它必须来自第二个程序。

有人知道会导致这种行为的原因吗?

  • 我试图在Google上搜索,但答案不是很有帮助。
  • 我多次读过这个男人^^' (没有更多帮助)。
  • 我读到memccpy在内存重叠时有不确定的行为,但它们没有重叠。

这是我的ft_memccpy()函数:

void    *ft_memccpy(void *str_dest, const void *str_src, int c, size_t n)
{
    unsigned int    i;
    char            *dest;
    char            *src;
    char            *ptr;

    dest = (char *)str_dest;
    src = (char *)str_src;
    i = 0;
    ptr = 0;
    while (i < n && ptr == 0)
    {
        dest[i] = src[i];
        if (src[i] == ((char)c))
            ptr = dest + i + 1;
        i++;
    }
    return (ptr);
}

编辑:我编辑因为我得到了投票,很多用户都没有理解我的问题。所以我认为它不够清晰,我希望这个编辑会^^&#39;。

1 个答案:

答案 0 :(得分:0)

这可能是64位指针和32位指针的问题。

您的ft_memccpy将返回64位指针,因此输出

0x7fff712edc44

虽然系统memccpy返回了32位的

0x712edc44