2012-03-24 45 views
9

我有一个结构体中有几个数组。数组的类型为unsigned char [4]。在一个结构体中初始化数组的值

我可以通过调用

struct->array1[0] = (unsigned char) something; 
... 
struct->array1[3] = (unsigned char) something; 

只是不知道是否有初始化在同一行的所有4个值的方式初始化每个元素。

解决方案:我需要创建一个初始化所有值的临时数组,然后调用memset()将值复制到结构数组。

+0

所有相同的值? – hmjd 2012-03-24 22:09:57

+0

我必须说,这是如此众所周知,一些谷歌搜索会迅速显示答案... http://stackoverflow.com/questions/201101/how-to-initialize-an-array-in-c ;-) – tchap 2012-03-24 22:10:00

回答

5

如果值是相同的,你可以做一些兴象

struct->array[0] = struct->array[1] = struct->array[2] = struct->array[3] = (unsigned char) something; 

否则,如果该值存储在一个数组,你可以使用memcpy功能,像这样

memcpy(struct->array, some_array, sizeof(struct->array)); 
+0

这是我需要做的。我曾尝试创建一个临时数组并使其相等,但我需要memcpy。谢谢! – 2012-03-24 22:15:08

23

如果你真的是“初始化”,在这个意义上,你可以在你声明的变量,然后确定时间做到这一点:

struct x { 
    unsigned char array1[4]; 
    unsigned char array2[4]; 
}; 

struct x mystruct = { 
    { 1, 2, 3, 4 }, 
    { 5, 6, 7, 8 } 
}; 
+0

我的意思是说,一旦结构被创建来编辑每个数组的值,就意味着更多。 – 2012-03-24 22:14:35

+3

Gotcha - 那么你可以使用memset()将它们全部设置为相同的值,或者如果你希望它们不同,可以创建一个模板数组和memcpy()。除此之外,几乎所有你能做的就是一个接一个地分配他们。 – 2012-03-24 22:15:36

+0

谢谢,memset是我所需要的。 – 2012-03-24 22:18:39

2

是:

struct Foo 
{ 
    unsigned char a[4]; 
    unsigned char b[4]; 
}; 

struct Foo x = { { 1, 2, 3, 'a' }, { 'a', 'b', 'c', 0 } }; 
10

当您创建结构,你可以初始化它初始化集合:

struct test { 
    int blah; 
    char arr[4]; 
}; 

struct test = { 5, { 'a', 'b', 'c', 'd' } }; 
2

我看到你有一个指针(你呢?)。

如果您为calloc()指针分配内存,则结构中的所有内容都将使用0进行初始化。

否则,您需要将memset()设置为0或逐个元素地指定一个值。

memset(struct_pointer, 0, sizeof *struct_pointer); 
+0

谢谢。 memset部分是帮助我的。 – 2012-03-24 22:18:22

0

您可以循环太:

for(i = 0; i < 4; i++) the_struct->array1[i] = (unsigned char) something; 

时,你有没有烧焦,但如这会甚至工作int(和值!= 0)。事实上,memsetting(比如说1)是一个由int构成的结构(当sizeof int大于1时)不是正确的初始化它们的方法。