删除struct array C中的所有项

时间:2016-12-12 14:33:50

标签: c

我有这样的结构:

struct DEPT {
    char dept_name[20];
    int time;
    int num;
    int check;
    struct CAR car;
    struct CAR arr[10];
    struct DEPT *next_dept;
    struct DEPT *prev_dept;
    struct DEPT *next_sibling;
};

arr [10]中有一些东西。我有一个函数,我想在函数开始时,arr [10]应该是空的。我怎么能这样做?

实际上,我有一个链表。我没有像struct DEPT部门这样的东西。我尝试了但是它失败了

  while (temp != NULL) {
    temp=(struct DEPT*){ .arr={(struct CAR){0}} };
    sibling = temp->next_sibling;
    while (sibling != NULL) {
        sibling=(struct DEPT*){ .arr={(struct CAR){0}} };
        sibling = sibling->next_sibling;
    }
    temp = temp->next_dept;  
    }

2 个答案:

答案 0 :(得分:1)

你可以:

struct DEPT dept = {0};

或者:

struct DEPT dept;
memset(&dept, 0, sizeof(dept));

UPDATE:只将struct的dept_name设置为0:

memset(&dept.dept_name, 0, sizeof(dept.dept_name));

答案 1 :(得分:1)

我认为这个例子可以帮助你。

struct xyz
{

        int data;
};

struct
{
        struct xyz str[3];
        struct xyz arr[10];
}abc={.arr[0 ... 2].data = 5 };




int main()
{
        printf("....%d\n",abc.arr[0].data);
        printf("....%d\n",abc.arr[1].data);
        printf("....%d\n",abc.arr[2].data);
        printf("....%d\n",abc.str[0].data);
        printf("....%d\n",abc.str[1].data);
        printf("....%d\n",abc.str[2].data);
}

答案: -

....5
....5
....5
....0
....0
....0

这是非标准的C.你可以将其初始化为部分"没有混合非标准的东西,例如

.arr = { [0].data=5, [1].data=5, [2].data=5 }.