我正在尝试设置结构中存在的一组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,数字是一个巨大的价值;
答案 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。