我正在尝试 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,而是一个巨大的值;
我正在尝试 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,而是一个巨大的值;
请记住,将数组的memset
每个字节设置为相同的值。因此,您正在将值为 1 的字节复制到数组的前 9000 个字节。假设 4 字节整数,这意味着您正在分配一个 int 值0x01010101
。但是,更重要的是,您并没有分配给整个数组,只是它的前 1/4,再次假设 4 字节整数。
你不能做你想做的事memset
。请改用 for 循环。
您要设置的“值”作为 int 传递给 memset,但 memset“使用此值的无符号字符转换填充内存块”一次一个字节。
因此,您将前 9000 个字节填充到值 0x01。int 通常是 2、4 或 8 个字节,而不是 1 个字节。
只需编写自己的循环即可。如果你因为某种原因不想自己写,检查你的系统是否有wmemset,然后检查你的wchar_t是否和int大小一样,那么你可以很讨厌使用wmemset。