我有以下代码:

void fill_buffer(void *buffer)
{
    char cbuf[20]={1,2,3,4,5,6,7,8,9,9,9,9,9,9,9,11,12,13,14,15};
    void* vbuf = (void*) cbuf;
    buffer=vbuf;
}


我正在尝试填充主函数提供给我的缓冲区,但是我不确定如何正确填充空白表。在主函数缓冲区中定义:

unsigned char buffer[20];

最佳答案

您需要复制数据,因为cbuffill_buffer()本地,并且在函数返回时将被释放,请尝试

void
fill_buffer(void *buffer, size_t bufsize)
{
    static const unsigned char cbuf = {
        1,  2,  3,  4, 5, 6, 7,  8,
        9,  9,  9,  9, 9, 9, 9, 11,
       12, 13, 14, 15
    };
    if (bufsize > sizeof(cbuf) / sizeof(*cbuf))
        bufsize = sizeof(cbuf) / sizeof(*cbuf);
    memcpy(buffer, cbuf, bufsize);
}


您应该确保目标buffer分配了足够的存储空间,在这种情况下为bufsize字节,但是如果cbuf元素的类型不同,则可能必须使用sizeof(element_type)

另外,也许您可​​以返回实际复制的字节数。

关于c - 如何将表存储到无效表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42794454/

10-12 15:03