2

現在、次のような作業コードがあります。

char input[4][10] = {ARR1, ARR2, ARR3, ARR4};

明らかに、これらの 1 次元配列を使用して 2 次元配列を作成していますが、これらは別の場所で定義された定数です。ただし、ファイルから目的の 1 次元配列の名前を読み取り、それに応じて 2 次元配列を初期化するように、このコードを変更する必要があります。

たとえば、ファイルに次のものが含まれているとします。

ARR9 ARR3 ARR5 ARR7

次に、初期化は次のように実行されます (これらすべての配列がすべて定義されていると仮定します)。

char input[4][10] = {ARR9, ARR3, ARR5, ARR7};

ファイルからの読み取りに問題はありませんが、2次元配列の作成と、ファイルから読み取った値を配列の名前として使用することに問題があります。

4

2 に答える 2

0

「他の場所で定義された定数」が現在このようになっているとしましょう

const char *ARR1 = "Alpha";
const char *ARR2 = "Bravo";
const char *ARR3 = "Charlie";

解決策 1

const char *ARR_Value[] = "Alpha", "Bravo", "Charlie", 0;
const char *ARR_Name[]  = "ARR1", "ARR2", "ARR3", 0;
// Pseudo code
Read file keyword
find matching ARR_Name[]
apply corresponding ARR_Value[] to input[] 

よりエレガントなソリューション

typedef struct {
  const char *Name;
  const char *Value;
  } ARR_t;

const ARR_t ARR[] = {
  { "ARR1", "Alpha"},
  { "ARR2", "Bravo"},
  { "ARR3", "Charlie"},
  { 0, 0}
};

// Pseudo code
Read file keyword
find matching ARR[] by doing strcmp(keyword, ARR[i].Name)
apply corresponding ARR[i].Value to input[] 

OP が初期化してから input[] の内容を変更する必要があるかどうかは明確ではchar input[4][10]ありませんconst char input[4][10]

于 2013-08-27T17:19:14.527 に答える