繁体   English   中英

您如何在C中初始化结构的动态数组?

[英]How do you initialize a dynamic array of structs in C?

我刚刚开始学习C,并且在尝试初始化结构数组时遇到了困难。 基本上,高级目标是将一个字符串(如小胡子模板)分成一个“静态字符串”或“可变”令牌,将它们分解存储在数组中。 然后,从理论上讲,要渲染数组,您将检查“如果它是一个字符串,只需复制该字符串,否则,如果它是一个变量,则获取值并将其添加到字符串中”。

因此,第一步就是初始化一个可以处理任意数量标记的数组,这就是我一直在尝试的方法:

typedef struct {
  int *type; // probably pointing to an enum or something, but not there yet
  char *value;
} token;

typedef struct {
  // token *tokens[] // how to do this?
} template;

template
compile(char *source) { // source string
  token tokens[] = malloc(sizeof(token) * 20) // 20 is arbitrary max
  // ... rest of code
}

所以有2个地方有token tokens[] 应该怎么写? 无论我尝试引用还是不引用,我都会不断收到此错误:

error: array initializer must be an initializer list
  token tokens[] = malloc(sizeof(tokens));

只是要注意,我看到在C ++中有向量类,但是我只想在直接C语言中执行此操作。

你可以做

typedef struct {
  token* tokens;
} template;

t.tokens = malloc(sizeof(token)*20);

token* tokens[20]将为您提供20个指向令牌的指针的数组。 当您需要20个令牌列表时,这将很有用。 但是从您的问题来看,我假设您只想要一个列表ok令牌,因此只需使用token* tokens

一种替代方法是:

typedef struct {
  token tokens[20]; // now you don't need malloc at all!
} template;

在第一种方法中,令牌的数量可以是动态的,并且可以在运行时指定。 对于第二个版本,必须在编译时知道(最大)令牌数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM