我怎么能将struct数组初始化为null?

时间:2014-03-17 21:34:09

标签: c arrays pointers struct

    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;。我该怎么解决?这样做的目的是当我访问一个元素时,我能够看到它是否有数据或只是空。

5 个答案:

答案 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(数组)返回数组中的元素数,而不是数组的字节大小。