c - 当您不知道要在字符串中放入多少个元素时,有没有办法在结构中初始化字符串数组?

标签 c arrays struct

我有这个结构:

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/

相关文章:

c - 头文件和多个c程序

php - 在我的主目录中安装 PHP

c - 如何正确释放 C 中分配的内存?

struct 中的一个元素可以访问 C 中自身的另一个元素吗?

struct - 创建结构实例的最佳实践是什么?

c - 如何通过 C 在后台执行进程并使用 Windows API?

java - 如何打印数组中 10 个最小值的索引

arrays - NodeJS/MongoDB - 将数组中的值与登录用户的值进行匹配

javascript - 如何按螺旋但逆时针方向排列数组 - Javascript

swift - 在 Swift 中保存结构