在C中存储常量数据的最佳方法

The*_*ion -2 c string

假设我正在制作一个C程序,当用户输入宝石的名字时,该程序会显示有关宝石的信息.

石头名称永远不会改变,并且只有不到20个,所以在运行时从外部文件读取它们似乎有点矫枉过正.

我还需要从多个文件中访问这些名称(比方说两个).

我通常做的是我声明一个全局char*数组,如下所示:

char *g_rsc_names[] = {"linemate", "deraumere", "sibur", "mendiane", "phiras", "thystane"};  
Run Code Online (Sandbox Code Playgroud)

在文件中我需要使用它们.这看起来很好,但这只允许我访问我声明这个全局数组的文件中的名称.

在这种情况下,存储石头名称的最佳/最干净的方法是什么?

Aki*_*ira 6

您可以使用函数包装数组,该函数返回const char*相应的石头名称,并将该声明放入包含在多个文件中的全局头文件中:

const char* get_stone_name(size_t id);
Run Code Online (Sandbox Code Playgroud)

源文件中定义get_stone_name类似:

const char* get_stone_name(size_t id) {
    static const char* const names[] = {
        "linemate", "deraumere", "sibur", "mendiane", "phiras", "thystane"
    };
    return (id < (sizeof(names) / sizeof(names[0])) ? names[id] : "");
}
Run Code Online (Sandbox Code Playgroud)

Decaring namesstatic将保证不会超过一次初始化,并且作为一个侧选项,您可以防止用户索引你的数组越界.

  • @Akira:我建议你这样做:`sizeof(names)/ sizeof(names [0])`来获取`names`数组中的元素数. (2认同)