我有这个结构:
typedef struct SomeStruct {
char someString[];
} SomeStruct;
这会产生一个错误,因为 someString
的大小在初始化时没有定义。
我想使someString
成为一个字符串数组,但我不会在初始化时知道数组的大小。 (数组中的元素将取决于稍后在程序中的用户输入)。
是否可以在不知道数组大小的情况下将其初始化为字符串数组?
最佳答案
是的,C 标准在 7.2.18-26 中谈到了这一点.您所描述的被称为结构的灵活数组成员。来自标准:
As a special case, the last element of a structure with more than one named member may have an incomplete array type; this is called a flexible array member.
基本上它的意思是,如果结构的最后一个成员是一个未定义大小的数组(运行时大小可能就是这种情况),那么在使用该结构时,您将分配适当的结构大小,包括您希望字符串有多大。例如:
typedef struct SomeStruct {
char someString[];
} SomeStruct;
具有灵活的数组成员 someString。一种常见的使用方法是:
SomeStruct *p = malloc(sizeof (SomeStruct) + str_size);
假设对 malloc 的调用成功,在大多数情况下,p 指向的对象的行为就好像 p 已被声明为:
struct {char someString[str_size]; } *p;
阅读标准以获取更多详细信息。流行词 flexible array member
也会显示很多信息。 wikipedia是一个很好的起点。
关于c - 当您不知道要在字符串中放入多少个元素时,有没有办法在结构中初始化字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41420551/