memccpy return 比src起始地址低的内存地址
memccpy return lower memory address than the src starting address
我有一个学校项目,我必须重新编写 memccpy()
函数。
我使用 2 个程序来检查我的代码是否正常工作。第一个是只有一个 main 的小程序。
第二个程序是另一个同学开发的(可以找here,想看的话)
对于我的程序,没有问题,我的memccpy 和原始函数return 右指针位于dest 指针的右字符上。
但是用第二个程序,原函数return一个比dest指针起始地址低的指针地址,例如:
src
值的起始地址:0x7fff712edc40
- Memccpy return指针地址:
0x712edc44
- 我的memccpy函数return指针:
0x7fff712edc44
所以,作为某人在他的计算机上编译和我的代码 return 正确的地址,它必须来自第二个程序。
有人知道什么会导致这种行为吗?
- 我尝试在 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
会 return 一个 64 位指针,所以它输出
0x7fff712edc44
虽然系统 memccpy
return编辑了 32 位的
0x712edc44
我有一个学校项目,我必须重新编写 memccpy()
函数。
我使用 2 个程序来检查我的代码是否正常工作。第一个是只有一个 main 的小程序。 第二个程序是另一个同学开发的(可以找here,想看的话)
对于我的程序,没有问题,我的memccpy 和原始函数return 右指针位于dest 指针的右字符上。 但是用第二个程序,原函数return一个比dest指针起始地址低的指针地址,例如:
src
值的起始地址:0x7fff712edc40
- Memccpy return指针地址:
0x712edc44
- 我的memccpy函数return指针:
0x7fff712edc44
所以,作为某人在他的计算机上编译和我的代码 return 正确的地址,它必须来自第二个程序。
有人知道什么会导致这种行为吗?
- 我尝试在 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
会 return 一个 64 位指针,所以它输出
0x7fff712edc44
虽然系统 memccpy
return编辑了 32 位的
0x712edc44