2

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

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

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

例如,如果文件包含:

ARR9 ARR3 ARR5 ARR7

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

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

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

4

2 回答 2

2

C 没有introspectionreflection,所以这种方式实际上是不可能的。

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

于 2013-08-27T16:52:34.370 回答
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 回答