我有一个学校项目,必须在其中重新编码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/