C语言 结构体数组需不需要初始化? 怎样初始化为0或为空

关于 C语言中的 结构体数组,最近有一个疑问:

在学习数组的时候,要求在定义一个数组之后,最好初始化一下,为0 或者为空,以免后面出现意想不到的错误。

那么 对于 结构体数组呢 ? 是否 定义了之后 也最好需要初始化一下?

例如 定义一个存储了书名和价格的结构体 struct book { char book_name[30] ; float price; } , 然后定义 一个书名的结构体数组

struct book history_book[6];

对于 初次定义的这个 结构体 数组, 到底需不需要初始化?

怎样将 这个 结构体数组初始化为0 或者 为空?

谢谢!

最好是做一下初始化
如:struct book history_book[6] = {0};
或者定义的时候不做初始化,在程序开始的地方对结构体数组做一下清空。
如:
struct book history_book[6] ;
memset(&history_book, 0,sizeof(history_book));

我个人认为应该是需要的,比如
struct student a[20] = {0};


typedef struct { 
  char book_name[30] ; 
  float price; 
} book_t;
book history_book[6] = {0};
//或者
memset(&history_book, 0, 6*sizeof(book_t));

局部定义下面加一句这个就行

memset(history_book,0,sizeof(history_book));

直接初始化为等于零就可以,调用的时候再进行赋值

我平常的编程习惯是:要初始化
使用C语言特定语句进行初始化:memset 函数

你可以使用初始化列表对数组和结构体进行初始化,被省略的部分自动初始化为0。

struct book
{
    char book_name[30];
    float price;
};
struct book history_book[6] = {0};

https://en.cppreference.com/w/c/language/initialization
https://en.cppreference.com/w/c/language/array_initialization

这个初始化也是可以的,一般也是建议进行初始化,但具体问题具体分析,初始化有时候可能不会导致未初始化带来的一下麻烦,但同时有时候一些奇奇怪怪的bug就是由于初始化导致的,所以成员是否初始化主要是方便编程方面实现而设置的,并不一定全初始化或者不初始化,这个选择是很灵活的

结构体实例化后需要进行对数组复制。

最好做,不然里面的初始值就交给编译器了,一般情况下编译器会将初始值初始化为0,特殊情况呢,最好程序员自己保证。