以类似于数组文字的方式初始化malloc内存?

时间:2012-03-30 22:37:56

标签: c

让我说我为自己做了一些记忆:

byte *header = calloc(5 + ZHEADERSIZE, sizeof(byte));

这给了我一个0的数组。但是如果我想对内存进行自定义初始化呢?以下代码是数组文字的相当详细的初始化。请注意,它实际上包含变量,所以我不能只记忆所有数组。我想知道我是否可以为一块内存块复制这种初始化方式,而不必手动插入它们。

unsigned char zhead[] =
{
    0x00, 37, 0, 218, 0xFF,

    0x50, 0x4b, 0x03, 0x04,
    0x14,
    0x00,
    0x00, 0x00,
    0x08, 0x00,
    0x08, 0x03,
    0x64, 0x3c,
    0xAA, 0xBB, 0xCC, 0xDD,
    csize, (csize>>8), 0, 0,
    uncsize, (uncsize>>8), 0, 0,
    0x07, 0x00,
    0x00, 0x00,
    'r', '/', 'r', '.', 'z', 'i', 'p'
};

1 个答案:

答案 0 :(得分:7)

使用calloc,您不能在C中初始化动态分配的内存而不是零。但是,您可以提供一个静态原型数组,您可以从中复制数据:

const char prototype[] = { 'a', 'b', 'c' };

int main()
{
   char * data = malloc(sizeof prototype);
   memcpy(data, prototype, sizeof prototype);

   data[1] = 'z'; // fill in custom data
}