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