2015-06-27 44 views
0

我有一个学校项目,我必须重新编码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,很多用户没有明白我的问题。所以我认为这是不够清楚,我希望这个编辑将^^'。

+0

什么返回值是你期待? –

+0

我期待在第一个'我'之后dest中指向下一个字符的指针 –

+0

我无法复制该问题。 'p1'和'p2'指针都是相同的。你能发布完整的可编译代码来证明这个问题吗? –

回答

0

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

ft_memccpy会返回一个64位指针,所以它输出

0x7fff712edc44 

虽然系统memccpy返回一个32位的

0x712edc44 
+0

你明白了!我只是在32位编译我的库和测试程序,它工作正常。 –