繁体   English   中英

如何根据C中的用户输入初始化结构数组的大小?

[英]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语言,其中两个主要问题是:

  1. struct声明中尝试初始化器没有任何意义(何时发生初始化,谁来做?)
  2. 尝试为数组使用类型时缺少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.

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