c语言初学者,一个关于结构和字符串混合的问题

我想让结构的一个成员是字符串。如图,当我没有给字符串长度时,这样报错

img


然后我给了字符串长度,编译通过

img


如果在定义结构的时候把数组形式改成指针形式,编译同样通过。
请问,为什么这里一定要提前说明字符串长度或者用指针,为什么第一次的代码不可以?

struct中不能指定不完整的数组,因为struct应有确定的大小,如果用变长数组,那么struct长度就不定了
用定长数组和指针就没有对应问题

你不给出长度,程序不知道该给你分配多少空间啊。既然是数组,就必须给出大小。或者就只是指针。后期动态分配空间

这个是字符数组,定义数组时必须指定长度,你没有给字符数组设置长度当然报错。因为系统不知道需要分配多少内存空间。

用指针的话。系统只要分配一个存放指向地址的空间,之后再改成动态分配的内存空间地址即可