Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
结构c中的memset数组_C_Struct_Initialization_Memset - Fatal编程技术网

结构c中的memset数组

结构c中的memset数组,c,struct,initialization,memset,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,数字是某个巨大的值 记住mems

我试图设置一个存在于结构中的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,数字是某个巨大的值

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


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

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

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


只需编写自己的循环即可。如果出于某种原因您不想编写自己的,请检查您的系统是否有wmemset,然后检查您的wchar\u t是否与int大小相同,然后您就可以使用wmemset。

这个巨大的值是
16843009
?(告诉我们这会很有帮助。)那么,如果int数组不在结构中,我可以使用memset,但不是别的?我可以使用一个指向数组的指针,然后使用memset吗(不要一直使用memset,只是想弄清楚原因)。你永远不能使用memset。它为数组中的每个字节分配相同的值。但是您想分配
0x00000001
。现在我知道了。因此,memset只在将内存块初始化为单个字符时才真正有用。如果我只想将所有值设置为0.No,那么代码可能会工作。您必须使用:sizeof(int)*9000而不是9000,否则不是每个字节都将被设置为零,只有前9000个/sizeof(int)int将被设置为零。我理解您所说的wmemset。但我不是一个讨厌的男孩,我会克制自己。