嗨,谁能解释一下为什么这个 memcpy 函数不起作用?
void *ft_memcpy(void *dst, const void *src, size_t n)
{
while (n--)
*(char *)dst++ = *(char *)src++;
return (dst);
}
最佳答案
该代码甚至不应该编译;这肯定不符合 C 规范。
void
指针上的算术未定义 - 您应该做的是创建可以从中复制的 char
指针。请记住返回目标缓冲区的开头,而不是结尾:
#include <stdlib.h> /* for size_t */
void *ft_memcpy(void *restrict dst, const void *restrict src, size_t n)
{
char *d = dst;
const char *s = src;
while (n--)
*d++ = *s++;
return dst;
}
顺便说一句,请注意,一个好的编译器有权识别此复制循环并将其优化为对标准库 memcpy()
的调用。
关于c - memcpy 重写不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50582273/