c - 当长度直到运行时才知道时,如何在 C 中声明和初始化这个结构数组?

标签 c struct compilation

foo.c

#include "main.h"
unsigned char currentBar;
struct foo myFoo[getNumBars()];

void initMyFoo(void)
{
 currentBar=(getNumBars()-1);
 for(i=0; i<(sizeof(myFoo)/sizeof(myFoo[0])); i++)
 {
  myFoo[i].we = 1;
  myFoo[i].want = 0;
  myFoo[i].your = 0;
  myFoo[i].soul = 0;
 }
}

主.c

#include "foo.h"
unsigned char getNumBars()
{
 return getDipSwitchValues();
}
initMyFoo();

(struct foo 在 foo.h 中声明。)

此代码必须在不对条形码进行硬编码的情况下执行,因为条形码的数量将根据用户设置的 DIP 开关而变化。现在我无法初始化 myFoo;我收到错误“初始化程序中预期的常量表达式”。我是否必须像这样初始化它:

struct foo myFoo[];

然后再改?如果是这样,如何使 myFoo[] 的长度正确?我显然没有对应于所需大小的可用常量。我需要动态分配这个还是什么?

我找到了类似的答案,但对我帮助不大 - C++ a class with an array of structs, without knowing how large an array I need

最佳答案

struct foo* myFoo;
unsigned int myFooSize;

void initMyFoo(void)
{
  myFooSize = getNumBars();
  myFoo = malloc(myFooSize * sizeof(*myFoo));
  for (i=0; i<myFooSize; i++) {
    /* ... */
  }
}

void cleanupMyFoo(void)
{
  free(myFoo);
  myFoo = NULL;
  myFooSize = 0;
}

关于c - 当长度直到运行时才知道时,如何在 C 中声明和初始化这个结构数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4338919/

相关文章:

c - 释放分配的内存时出现不同的错误消息

c - 在 C 中使用 qsort 对 float 组进行排序

c - 如何在 __m128 变量中包含整个复数?

c++ - 将结构转换为字节并返回结构

java - Maven 不会编译 Java 注解?

c++ - 在 c/c++ 中包括结构和编译

c - fscanf 不会读取文本文件中的整数值

c# - 在 C# 中将结构转换为 byte[]

c - 如何将数组添加到位域结构?

c++ - 打包修改后的 Qt 类