根据解析的整数代码检索字符串的最佳方法?

时间:2016-03-08 12:35:34

标签: c string

请忽略帖子的主题,因为它可能听起来像其他东西,而不是我在这里问的实际问题。

我想创建一个C函数,它应该检索一个与特定整数代码相关联的字符串值,其签名将非常简单,如:

char *Get_Msg (int code, char *errorInfoTable[][2]);

所以,我需要首先存储字符串以及相关的代码,因为我不能采用多种数据类型的数组,我最终也按字符串存储代码:

char *errorInfo[][2] = {

/* Error Code  Error Message
 * ----------  ------------- */
   {      "0", "No error"                                  },
   {     "93", "Error in processing"                       },
   { "-32700", "PARSE_ERROR"                               },
   { "-32600", "INVALID_REQUEST "                          },  
};

然后我可能只是在函数中读取这个表,而该函数又应该返回相关的字符串。首先,它是在函数本身内定义此表还是作为文件中的全局变量的好方法。但是,如果我希望将此功能存储在单独的C文件中并从其他文件中调用它,该怎么办?我看到如果我将文件声明为全局变量,我需要在主文件和函数中声明 char * errorInfoTable [] [2] 的extern,然后在函数中解析。我希望代码计算解析表本身的行数。如果我尝试使用 Get_Msg 函数计算行数,这似乎不起作用,因为函数无法从形式参数中看到它 char * errorInfoTable [] [2] 。我可以通过提到形式参数中的行数或者在函数中传递行数来实现这一点,但我不想在任何地方明确计算行数。我想以这样的方式设计它,程序员只需添加/删除表中的行数,不应该触及程序中任何其他位置的任何维度。

还有其他方法可以存储和检索此表中的字符串吗?或任何其他更好的方法来实现此功能?

1 个答案:

答案 0 :(得分:4)

struct { int error_code; const char *message; } errorInfo[] = {

/* Error Code  Error Message
 * ----------  ------------- */
   { -32700, "PARSE_ERROR"                               },
   { -32600, "INVALID_REQUEST "                          },  
   {      0, "No error"                                  },
   {     93, "Error in processing"                       },
};

那应该给你你想要的东西。保持排序甚至可以让你进行对数查找 我还将表保持静态并位于Get_Msg内。

如果您需要存储与代码相关的更多数据,您可以执行以下操作:

struct error_code_data {
  int error_code;
  const char *message;
  /* More data */
};

struct error_code_data const * get_error_code_data(int error_code);