1

我想初始化一个结构数组,但是 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));
4

3 回答 3

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()into tmp.data,因为这只是一个没有分配内存的悬空指针。

于 2011-04-19T03:13:35.743 回答
4

memset()设置每个字节的值。将指针类型转换为整数(第二个参数)没有问题。主要问题是它将大于一个字节。

我不知道memset()该副本的任何版本都超过字节值。我会为此创建一个简单的循环。

另请注意,如果您的代码有效,还会有一些其他问题。一方面,sizeof(my_array)返回数据结构中的总字节数,而不是元素数。此外,您的代码只会复制指针。您需要实际复制它指向的数据,因为目标不是指针——它是实际的结构。

于 2011-04-19T03:15:09.743 回答
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]));
于 2011-04-19T06:23:17.590 回答