typedef struct
{
char*title;
int year;
int length; //in minutes
} record;
record list[1024];
int j;
for(j=0;j<1024;++j)
list[j]=NULL;
我正在尝试初始化一个struct数组,并让每个元素最初指向null,而gcc在分配类型&#39;记录&#39;时会给出错误&#34;不兼容的类型。来自类型&#39; void *&#34;。我该怎么解决?这样做的目的是当我访问一个元素时,我能够看到它是否有数据或只是空。
答案 0 :(得分:5)
您可以在声明时以这种方式初始化数组:
record list[1024] = {{0}};
答案 1 :(得分:3)
list[1024];
是您的struct的对象数组,您可以像
list[j].title;
list[j].year;
list[j].length;
你在做的是:
list[j]=NULL
list[j]
的类型为record
,NULL为void*
。我想这不是你的想法。
通过单独访问结构来初始化结构中的各个元素,或者按照其他人的建议使用memset
。
答案 2 :(得分:3)
如果你想在for循环中一次做一个,它看起来像这个
for(j=0;j<1024;++j)
list[j]=(record){0,0,0};
我建议使用memset(list,0,1024*sizeof(record))
或bzero(list, 1024*sizeof(record))
如果你想用指针做,那么你可以像这样声明你的数组:
record * list[1024];
然后你可以像你一样将每一个设置为NULL
,并在准备好时将每个设置为malloc。
答案 3 :(得分:0)
您的数组不是指向record
的指针数组,它是一个record
值的数组。您不能将数组的元素设置为NULL
,因为它们不是指针。这不是java ...
答案 4 :(得分:0)
我的C有点生疏,但我相信你想要这个:
record list[1024];
memset((char*)list, '\0', sizeof(record) * sizeof(list));
因为sizeof(数组)返回数组中的元素数,而不是数组的字节大小。