c - 基于解析的整数代码检索字符串的最佳方法?

标签 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]。我可以通过在形式参数中提及行数或在函数中也传递行数来做到这一点,但我不想在任何地方显式计算行数。我想以这样一种方式设计它,即程序员将只添加/删除表中的行数,并且不应在程序的其他任何地方触及任何维度。

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

最佳答案

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);

关于c - 基于解析的整数代码检索字符串的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35867556/

相关文章:

java - 对字符串数组进行数字排序

c++ - 获取符号链接(symbolic link)目标卷名的最佳方法 [NTFS]

c - 如何检查 EVP_PKEY 是否包含私钥?

c - 防止字符串操作崩溃导致整个应用程序崩溃

C 编程,在函数中更改字符串值而不将大小作为参数传递

c++ - 字符串中的子串计算

java - 字符串文字池是对字符串对象的引用的集合,还是对象的集合

arrays - 数组洗牌后不会出现重复的结果

c - 使用 C 程序解析 MIDI 文件时出现问题

java - 时间戳最后带有.0