我想初始化一个struct数组,但是memset()的第二个参数需要一个int。是否有另一个函数执行相同但有一个(void *)有第二个参数? 我想到了memcpy()但它没有在整个数组中设置值。有什么想法吗?
结构:
typedef struct {
int x;
int y;
char *data;
} my_stuff;
代码:
my_stuff my_array[];
my_array = malloc(MAX * sizeof(my_stuff));
my_stuff *tmp;
tmp->x = -1;
tmp->y = 1;
strcpy(tmp->data = "Initial state");
memset(my_array, tmp, sizeof(my_array));
答案 0 :(得分:4)
没有标准功能 - 您只需要在循环中调用memcpy()
:
my_stuff *my_array = malloc(MAX * sizeof(my_stuff));
my_stuff tmp;
size_t i;
tmp.x = -1;
tmp.y = 1;
tmp.data = "Initial state";
for (i = 0; i < MAX; i++)
memcpy(&my_array[i], &tmp, sizeof tmp);
请注意,您不能strcpy()
进入tmp.data
,因为这只是一个没有分配内存的悬空指针。
答案 1 :(得分:4)
memset()
设置每个字节的值。对指向整数的指针(第二个参数)进行类型转换没有问题。主要问题是它将大于一个字节。
我不知道任何版本的memset()
复制多个字节值。我会为此创建一个简单的循环。
另请注意,如果代码有效,您的代码会有一些其他问题。首先,sizeof(my_array)
返回数据结构中的总字节数,而不是元素数。此外,您的代码只会复制指针。你需要实际复制它指向的数据,因为目标不是指针 - 它是实际的结构。
答案 2 :(得分:0)
在这种情况下,您不能使用memset()。你应该使用memcpy()。试试吧: 1. malloc你的数组 2.初始化数组的第一个元素 3.将第一个元素复制到所有元素
/* step 1 */
my_stuff *my_array = malloc(MAX * sizeof(my_stuff));
int i;
/* step 2 */
my_array[0].x = -1;
my_array[0].y = 1;
my_array[0].data = "Initial state";
/* step 3 */
for (i = 1; i < MAX; i++)
memcpy(&my_array[i], &my_array[0], sizeof(my_array[0]));