目前,我的工作代码如下所示:
char input[4][10] = {ARR1, ARR2, ARR3, ARR4};
显然,我正在使用这些1d数组创建一个二维数组,这些数组是在别处定义的常量。但是,我需要更改此代码,以便从文件中读取所需的1d数组的名称,并相应地初始化2d数组。
例如,如果文件包含:
ARR9 ARR3 ARR5 ARR7
然后初始化将运行(假设所有这些数组都已定义):
char input[4][10] = {ARR9, ARR3, ARR5, ARR7};
我从文件中读取没有问题但是在创建2d数组时遇到困难,并且使用从文件中读取的值作为数组的名称。
答案 0 :(得分:2)
C没有introspection或reflection,所以这不可能。
但是,您可以拥有一个转换表,该转换表从字符串 "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]
。