我有一个学校项目,我必须重新编码memccpy()
函数。memccpy返回内存地址低于src的起始地址
我使用2个程序来检查我的代码是否正常工作。第一个是只有一个主要的小程序。 第二个程序是由另一个学生开发的(可以找到here,如果你想看的话)
用我的程序,没有问题,我的memccpy和原始函数都返回右边字符的右边指针来自dest指针。 但随着第二程序,原函数返回一个下指针ADRESS比DEST指针起始ADRESS,例如:在src
值的
- 起始地址:
0x7fff712edc40
- Memccpy返回指针地址:
0x712edc44
- 我memccpy函数返回指针:
0x7fff712edc44
所以,有人编他的电脑和我的代码返回正确的ADRESS,它必须来自第二个程序。
有人知道会导致这种行为吗?
- 我试图在谷歌搜索得到的答复是不是非常有帮助。
- 我多次阅读男人^^'(没有更多帮助)。
- 我看到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,很多用户没有明白我的问题。所以我认为这是不够清楚,我希望这个编辑将^^'。
什么返回值是你期待? –
我期待在第一个'我'之后dest中指向下一个字符的指针 –
我无法复制该问题。 'p1'和'p2'指针都是相同的。你能发布完整的可编译代码来证明这个问题吗? –