我有一个结构体中有几个数组。数组的类型为unsigned char [4]。在一个结构体中初始化数组的值
我可以通过调用
struct->array1[0] = (unsigned char) something;
...
struct->array1[3] = (unsigned char) something;
只是不知道是否有初始化在同一行的所有4个值的方式初始化每个元素。
解决方案:我需要创建一个初始化所有值的临时数组,然后调用memset()将值复制到结构数组。
我有一个结构体中有几个数组。数组的类型为unsigned char [4]。在一个结构体中初始化数组的值
我可以通过调用
struct->array1[0] = (unsigned char) something;
...
struct->array1[3] = (unsigned char) something;
只是不知道是否有初始化在同一行的所有4个值的方式初始化每个元素。
解决方案:我需要创建一个初始化所有值的临时数组,然后调用memset()将值复制到结构数组。
如果值是相同的,你可以做一些兴象
struct->array[0] = struct->array[1] = struct->array[2] = struct->array[3] = (unsigned char) something;
否则,如果该值存储在一个数组,你可以使用memcpy功能,像这样
memcpy(struct->array, some_array, sizeof(struct->array));
这是我需要做的。我曾尝试创建一个临时数组并使其相等,但我需要memcpy。谢谢! – 2012-03-24 22:15:08
如果你真的是“初始化”,在这个意义上,你可以在你声明的变量,然后确定时间做到这一点:
struct x {
unsigned char array1[4];
unsigned char array2[4];
};
struct x mystruct = {
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 }
};
我的意思是说,一旦结构被创建来编辑每个数组的值,就意味着更多。 – 2012-03-24 22:14:35
Gotcha - 那么你可以使用memset()将它们全部设置为相同的值,或者如果你希望它们不同,可以创建一个模板数组和memcpy()。除此之外,几乎所有你能做的就是一个接一个地分配他们。 – 2012-03-24 22:15:36
谢谢,memset是我所需要的。 – 2012-03-24 22:18:39
是:
struct Foo
{
unsigned char a[4];
unsigned char b[4];
};
struct Foo x = { { 1, 2, 3, 'a' }, { 'a', 'b', 'c', 0 } };
当您创建结构,你可以初始化它初始化集合:
struct test {
int blah;
char arr[4];
};
struct test = { 5, { 'a', 'b', 'c', 'd' } };
我看到你有一个指针(你呢?)。
如果您为calloc()
指针分配内存,则结构中的所有内容都将使用0
进行初始化。
否则,您需要将memset()
设置为0或逐个元素地指定一个值。
memset(struct_pointer, 0, sizeof *struct_pointer);
谢谢。 memset部分是帮助我的。 – 2012-03-24 22:18:22
您可以循环太:
for(i = 0; i < 4; i++) the_struct->array1[i] = (unsigned char) something;
时,你有没有烧焦,但如这会甚至工作int(和值!= 0)。事实上,memsetting(比如说1)是一个由int构成的结构(当sizeof int大于1时)不是正确的初始化它们的方法。
所有相同的值? – hmjd 2012-03-24 22:09:57
我必须说,这是如此众所周知,一些谷歌搜索会迅速显示答案... http://stackoverflow.com/questions/201101/how-to-initialize-an-array-in-c ;-) – tchap 2012-03-24 22:10:00