具有预定义1d数组的2d阵列的动态输入

时间:2013-08-27 16:47:55

标签: c arrays file-io

目前,我的工作代码如下所示:

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

显然,我正在使用这些1d数组创建一个二维数组,这些数组是在别处定义的常量。但是,我需要更改此代码,以便从文件中读取所需的1d数组的名称,并相应地初始化2d数组。

例如,如果文件包含:

ARR9 ARR3 ARR5 ARR7

然后初始化将运行(假设所有这些数组都已定义):

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

我从文件中读取没有问题但是在创建2d数组时遇到困难,并且使用从文件中读取的值作为数组的名称。

2 个答案:

答案 0 :(得分:2)

C没有introspectionreflection,所以这不可能。

但是,您可以拥有一个转换表,该转换表从字符串 "ARR1""ARR2"等转换为实际数组,然后您可以复制内容实际数组到input条目。或者不像现在那样拥有一个数组数组,你可以拥有一个指针数组,只需将指针设置为指向正确的数组。

答案 1 :(得分: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]