从文件中读取数组大小

Reading array size from file

我有一个程序应该根据它正在使用的设备数量调整元素数量。我有一个配置 *.txt 文件,其中包含一些参数,允许不懂编程语言的用户根据他们的需要调整程序。

比如到现在都是这样处理的。在头文件中:

enum 
{
    // number of input and output channels
    kMaxInputChannels = 8,
    kMaxOutputChannels = 8
};

typedef struct AudioDriverSettings
{
   (...)
   ASIOBufferInfo bufferInfos[kMaxInputChannels + kMaxOutputChannels]; 
   ASIOChannelInfo channelInfos[kMaxInputChannels + kMaxOutputChannels];
   (...)

} AudioDriverSettings;

typedef struct AudioFileConfig
{
   (...)
   int inputId[kMaxInputChannels];
   int outputId[kMaxOutputChannels];
   bool shouldMixInput[kMaxInputChannels];
   bool shouldRecordChannel[kMaxInputChannels];
   (...)

} AudioFileConfig;

在*.txt中有变量:

NUM_CHANNELS_IN             8
NUM_CHANNELS_OUT            8

在程序启动时,我正在读取它并写入变量:

if (!strcmp(tmp_str, "NUM_CHANNELS_IN")) 
        NUM_CHANNELS_IN = atoi(token);
if (!strcmp(tmp_str, "NUM_CHANNELS_OUT")) 
        NUM_CHANNELS_OUT = atoi(token);

我想得到如下效果,但变量需要是常量,所以它不起作用。

int NUM_CHANNELS_IN;
int NUM_CHANNELS_OUT;

typedef struct AudioDriverSettings
{
   (...)
   ASIOBufferInfo bufferInfos[NUM_CHANNELS_IN + NUM_CHANNELS_OUT]; 
   ASIOChannelInfo channelInfos[NUM_CHANNELS_IN + NUM_CHANNELS_OUT];
   (...)

} AudioDriverSettings;

typedef struct AudioFileConfig
{
   (...)
   int inputId[NUM_CHANNELS_IN];
   int outputId[NUM_CHANNELS_OUT];
   bool shouldMixInput[NUM_CHANNELS_IN];
   bool shouldRecordChannel[NUM_CHANNELS_IN];
   (...)

} AudioFileConfig;

有什么简单的方法可以处理吗?

我相信您正在寻找的答案是使用指针。通过更改:

整数NUM_CHANNELS_IN; 整数 NUM_CHANNELS_OUT;

致: 整数 *NUM_CHANNELS_IN; 整数 *NUM_CHANNELS_OUT;

您将能够将您的变量传递出函数等。我无法说出您需要对代码进行的确切更改,您可能需要复习一下指针的正确语法,但我相信这一点如果我正确解释了您的问题,这是实现您想要做的事情的最简单方法。

希望对您有所帮助!

如果这是 C,您需要动态分配数组:

ASIOBufferInfo *bufferInfos;
...
bufferInfos = malloc(sizeof(ASIOBufferInfo) * (NUM_CHANNELS_IN + NUM_CHANNELS_OUT));

如果这是 C++,请使用 std::vector class:

std::vector<ASIOBufferInfo> bufferInfos;
...
bufferInfos.reserve(NUM_CHANNELS_IN + NUM_CHANNELS_OUT);

然后push_backvector。或者:

std::vector<ASIOBufferInfo> bufferInfos(NUM_CHANNELS_IN + NUM_CHANNELS_OUT);

然后只访问 bufferInfos.at(i).

等元素