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

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

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

使用我的程序,没有问题,我的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); } 

编辑:我编辑,因为我得到了downvote和许多用户不理解我的问题。 所以我认为它不够清楚,我希望这个编辑将^^’。

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

你的ft_memccpy将返回一个64位指针,因此输出

 0x7fff712edc44 

虽然系统memccpy返回了32位

 0x712edc44