我试图避免为 5 个不同的数组重复我的代码。我有 3 个数组(将来可能会更多):
const char *FirstlistOfOptionText[2] = {OPT_1,
OPT_2};
const char *SecondlistOfOptionText[2] = {OPT_1,
OPT_2};
const char *ThirdlistOfOptionText[2] = {OPT_1,
OPT_2};
每个元素中的元素都不相同。现在它们是因为我只是复制和粘贴它们。元素的数量也不会。
我有一个函数,我想根据我作为参数给出的值打印列表的每个元素。此外,我需要以其他颜色打印其中一个元素(除了一个绿色之外,所有元素都是白色的)。
我只想像现在一样拥有一个用于打印和选择颜色的代码。但我想在这样做之前选择正确的数组。我想过:
const char *listOfOptions[];
if(menu_t.first_level_option == 0) {
listOfOptions = FirstlistOfOptionText;
}
if(menu_t.first_level_option == 1) {
listOfOptions = SecondlistOfOptionText;
}
if(menu_t.first_level_option == 2) {
listOfOptions = ThirdlistOfOptionText;
}
但是我收到一些关于“listOfOptions”存储大小的错误是未知的。或者我不能将 const char** 用于 char* 或类似的东西。
这样做的正确方法是什么?
原文由 Biribu 发布,翻译遵循 CC BY-SA 4.0 许可协议
本质上,您需要将 listOfOptions 设为 char **;
可以通过指向指针的指针来引用指针数组(这就是 char ** 的含义)。
使用 listOfOptions 的任何人都将不知道大小,因此您需要一种确定大小的方法。要么使用 NULL 指针终止列表,要么您将不得不使用跟踪大小的第二个变量 (listOfOptionsSize)。
所以下面的代码应该可以编译(我选择了 NULL 终止的列表)。
现在对于您的打印函数,它将获取指向指针列表的指针作为参数,并且看起来像这样:
哦,欢迎来到 C 指针地狱 :-)