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

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

对于我的程序,没有问题,我的memccpy和原始函数都从dest指针返回正确字符上的正确指针。
但是在第二个程序中,原始函数返回的指针地址要比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);
}


编辑:我进行了编辑,因为我投票不足,而且许多用户不理解我的问题。所以我认为这还不够清楚,我希望此编辑能够^^'。

最佳答案

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

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

0x7fff712edc44


当系统memccpy返回32位的

0x712edc44

关于c - memccpy返回比src起始地址低的内存地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31094133/

10-11 23:09