c - memcpy函数的实现

标签 c memcpy

我看了看 http://www.opensource.apple.com/source/xnu/xnu-2050.24.15/libsyscall/wrappers/memcpy.c

并且不明白以下内容:

1-

里面

void * memcpy(void *dst0, const void *src0, size_t length) {
    char *dst = dst0;
    const char *src = src0;

行:

if ((unsigned long)dst < (unsigned long)src) {

我们如何将 dst 转换为 unsigned long ?这是一个指针!

2- 为什么他们有时喜欢向前复制,有时喜欢向后复制?

最佳答案

你是对的,这个实现是不可移植的,因为它假设指针适合unsigned long。标准不保证这一点。

此实现的正确类型是 uintptr_t ,保证适合指针。

关于c - memcpy函数的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20003192/

相关文章:

c - 初始化指向结构体数组的指针数组

c - 插入链表 -

C/UNIX 每 x 毫秒执行一次函数

c - 简单的字符串复制,但 memcpy 不起作用

c - 如何在C中连接字节数组

c++ - 检查 POD 变量的变化

C 指针和数组声明

更改结构模块指针

c - 错误 : warning: incompatible implicit declaration of built-in function ‘memcpy’ [enabled by default]

c++ - 你能用 memcpy 反序列化字节吗?