从文件中读取数组大小

时间:2015-02-10 07:07:23

标签: c arrays global-variables

我有一个程序,应该将元素数量调整为它正在使用的设备数量。我有一个config * .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;

有没有简单的方法来处理它?<​​/ p>

2 个答案:

答案 0 :(得分:0)

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

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

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

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

然后push_back转到vector。或者:

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

然后只需访问bufferInfos.at(i)等元素。

答案 1 :(得分:-2)

我相信你要找的答案是使用指针。通过改变:

int NUM_CHANNELS_IN; int NUM_CHANNELS_OUT;

于: int * NUM_CHANNELS_IN; int * NUM_CHANNELS_OUT;

你将能够将你的变量传递出函数等。我不能说你需要对你的代码做出确切的改变,你可能需要用正确的指针语法,但我相信这是如果我正确解释了你的问题,那么最简单的方法来实现你想要做的事情。

希望这有帮助!