2

我正在尝试 memset 结构中存在的整数数组:

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,而是一个巨大的值;

4

2 回答 2

4

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

你不能做你想做的事memset。请改用 for 循环。

于 2012-05-03T22:39:04.950 回答
1

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

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

只需编写自己的循环即可。如果你因为某种原因不想自己写,检查你的系统是否有wmemset,然后检查你的wchar_t是否和int大小一样,那么你可以很讨厌使用wmemset。

于 2012-05-03T22:52:26.297 回答