[英]How do I initialise the size of my struct array, depending on the user input in C?
我已经创建了一个结构,现在我想初始化这些结构的数组,其大小取决于用户的输入。
struct StarsStruct
{
int SerialNumber = 1;
char StarName[6] = "Peter";
double x = 0;
double y = 0;
};
int NumberOfStars = 0;
if (strcmp(CurrentCommand, "bang") == 0)
{
Clear();
printf("Enter the number of stars to be created: ");
scanf("%d", &NumberOfStars);
StarsStruct Stars[NumberOfStars];
}
但是,在代码的最后一行,我遇到了一个错误; “表达式必须具有恒定值”。 因此,我是否不能仅仅从scanf中获取一个值并将其用于初始化struct数组?
您的代码有一些问题使其无法真正成为C语言,其中两个主要问题是:
struct
声明中尝试初始化器没有任何意义(何时发生初始化,谁来做?) struct
。 它也是C99,但这当然可以。
这个经过修改但类似的程序可以工作:
struct StarsStruct
{
int SerialNumber;
char StarName[6];
double x;
double y;
};
int main(void)
{
int NumberOfStars = 0;
if (scanf("%d", &NumberOfStars) == 1)
{
struct StarsStruct Stars[NumberOfStars];
printf("size is %zu bytes\n", sizeof Stars);
}
return 0;
}
如果输入例如14,则打印448
,这表示每个结构均为32字节。 由于填充,这是有道理的。
您将不得不使用malloc来代替,
StarsStruct *Stars = malloc(sizeof(struct StarsStruct) * NumberOfStars));
现在,您可以将Stars索引为数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.