memset数组内部结构c

时间:2012-05-03 22:35:44

标签: c struct initialization memset

我正在尝试设置结构中存在的一组int:

typedef struct _xyz {
    int zList[9000];
} xyz;

int dll_tmain(void)
{
    xyz *Xyz       =  (xyz *) calloc(10, sizeof(xyz));
    memset((&Xyz[0])->zList, 1, 9000);
}

我在memset()中尝试了很多变化,但无济于事。而不是 初始化为1,数字是一个巨大的价值;

2 个答案:

答案 0 :(得分:4)

请记住,memset将数组的每个字节设置为相同的值。因此,您要将数组的前9000个字节复制为值为1的字节。假设您有4个字节的整数,这意味着您要分配一个值为0x01010101的int。但是,更重要的是,你没有分配给整个数组,只分配了它的前1/4,再次假设是4字节整数。

您无法使用memset执行所需操作。改为使用for循环。

答案 1 :(得分:1)

要设置的'value'作为int传递给memset,但memset'使用此值的无符号char转换'一次一个字节来填充内存块。

因此,您将前9000个字节填充到值0x01。 int通常是2,4或8个字节,而不是1个字节。

只需编写自己的循环即可。如果您不想出于某种原因编写自己的,请检查您的系统是否有wmemset,然后检查您的wchar_t是否与int相同,那么您可能会讨厌并使用wmemset。