c - memcpy 重写不起作用

标签 c memory-management memcpy

嗨,谁能解释一下为什么这个 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/

相关文章:

c - if 语句中的函数调用不带括号

c++ - 在 C++ 中转置大文件的最有效内存方式

c - MIPS memcpy 问题(我认为)

c - 更好地设计子分支 if 语句子条件

C printf 将 long long 转换为 %o (unsigned int) 时发生了什么

c - scanf 内存分配错误

在 C 中复制时将打包数据转换为对齐数据

performance - 为什么 memcpy() 的速度每 4KB 就会急剧下降?

c - 即使在函数返回后,在函数内部声明的非静态指针变量似乎仍被保留

memory-management - 在保持其子 slice 的同时生长 slice