c - C 中的指针转换

标签 c pointers casting

static int write_stream(const void *buffer, size_t size, void *app_key) 
{
    char *stream = (char *)app_key;

    return 0;
}

为什么指针转换 不会导致将 (size_t size) 个字节从缓冲区复制到 由 app_key 定义的流?

谢谢

编辑:我将此函数作为另一个函数的参数调用以使用回调:

static int write_stream(const void *buffer, size_t size, void *app_key) 
{
    char *stream = (char *)app_key; 
    return 0;
}

int print_to_2buf(char *ostream, struct asn_TYPE_descriptor_s *td, void *struct_ptr)
{
    asn_enc_rval_t er; /* Encoder return value */

    // write_stream is called as argument
    er = xer_encode
    (
        td,
        struct_ptr,
        XER_F_BASIC,
        /* BASIC-XER or CANONICAL-XER */ write_stream,
        ostream
    );

    return (er.encoded == -1) ? -1 : 0; 
}

最佳答案

您所做的只是创建了一个指向 char 的指针,该指针与您收到的指向 void 的指针具有相同的地址。您没有执行任何操作来将字节从 app_key 复制到 buffer,因此不会复制任何内容。除非我误解了这个问题,否则您应该只使用 memcpymemmove

关于c - C 中的指针转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3469984/

相关文章:

c++ - 指向未指定大小 "(*p)[]"的数组的指针在 C++ 中非法但在 C 中合法

c - 空指针的用途

不指定泛型类型的 Swift 转换

ios - 如何使用其父类(super class)的实例初始化我的子类?

在 C 中强制转换然后取消引用指针

数组中的 char 指针值

c - C 中的前向引用是什么?

python - Swig Python 不包装方法

c - 如何在 C 中访问链表中的下一个元素?

go - Go接口(interface){}与内置类型直接比较 : Why does this work?