簡體   English   中英

從文件讀取數組大小

[英]Reading array size from file

我有一個程序,可以根據要使用的設備數來調整元素數量。 我有一個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);

我想獲得如下效果,但是變量需要為const,所以它不起作用。

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;

有沒有簡單的處理方法?

如果是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_backvector 要么:

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

然后只需訪問諸如bufferInfos.at(i)類的元素。

我相信您正在尋找的答案是使用指針。 通過更改:

int NUM_CHANNELS_IN; int NUM_CHANNELS_OUT;

到:int * NUM_CHANNELS_IN; int * NUM_CHANNELS_OUT;

您將能夠從函數等中傳遞變量。我不能說您需要對代碼進行確切的更改,您可能需要重新編寫指針的正確語法,但是我相信這是最簡單的方法如果我正確解釋了您的問題,請實現您想要做的事情。

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM