【发布时间】:2015-06-27 22:23:29
【问题描述】:
我有一个学校项目,我必须重新编码 memccpy() 函数。
我使用 2 个程序来检查我的代码是否正常工作。第一个是只有一个主程序的小程序。 第二个程序是另一个学生开发的(可以找到here,如果你想看的话)
使用我的程序,没有问题,我的 memccpy 和原始函数都从 dest 指针返回正确字符上的右指针。 但是对于第二个程序,原函数返回的指针地址比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);
}
编辑:我编辑是因为我投了反对票,而且许多用户不理解我的问题。所以我认为这还不够清楚,我希望这个编辑会^^'。
【问题讨论】:
-
你期望什么返回值?
-
我期待在第一个 'i' 之后指向 dest 中下一个字符的指针
-
我无法重现该问题。
p1和p2指针是相同的。你能发布完整的可编译代码来演示这个问题吗? -
请出示您的
printf电话。想知道您正在使用什么格式说明符以及在哪里进行调用。 -
奥利弗,您的问题不在
ft_memccpy中(或者从您的示例中看不出来)。两者都编译并返回相同的地址。我使用了以下printf调用而不是printf ("\n p1 : %p\n p2 : %p\n\n", (char *)p1, (char *)p2);