【问题标题】:How to make an array of an arrays of strings?如何制作字符串数组的数组?
【发布时间】:2018-09-23 21:20:31
【问题描述】:

所以,我有三个字符串数组指针:

char *list1[3] = {"String 11", "String 12", "String 13"};
char *list2[3] = {"String 21", "String 22", "String 23"};
char *list3[3] = {"String 31", "String 32", "String 33"};

我需要在运行时根据用户输入来访问它们。例如:如果输入为 0,访问 list1 等等。我想我可以将这些数组指针组成一个数组,它可以工作。这是我尝试过的:

char *ArrayList[3] = {*list1, *list2, *list3};

但是当我尝试打印 ArrayList[0]、ArrayList[1] 和 ArrayList[2] 时,它只打印了每个列表的第一个元素。

我在这里做错了什么?

【问题讨论】:

  • *list1 等价于list1[0]
  • @melpomene 那么我如何获得整个列表1?

标签: c arrays string pointers


【解决方案1】:

您的ArrayList 应该保存指向指针的指针,并且您需要一个循环来打印一行的所有列(否则您将始终只获得一行的第一个元素):

char *list1[3] = {"String 11", "String 12", "String 13"};
char *list2[3] = {"String 21", "String 22", "String 23"};
char *list3[3] = {"String 31", "String 32", "String 33"};

char **ArrayList[3] = {list1, list2, list3};

int main() {
    for (int r=0;r<3;r++) {
        for (int c=0; c<3; c++) {
            printf("%s ",ArrayList[r][c]);
        }
        printf("\n");
    }
}

输出:

String 11 String 12 String 13 
String 21 String 22 String 23 
String 31 String 32 String 33 

【讨论】:

  • 啊,我明白了。你能给我链接一篇解释指针和双指针的好文章吗?我仍然对您如何将 ArrayList[r][c] 用于一维数组感到困惑。我猜是因为双指针?
  • 使用非方形二维数组通常更清楚。也许 2x3 或 3x4 可以清楚地区分 [r][c] 的角色。
  • 有没有办法从 ArrayList 中获取 list1 并将其传递给函数?我一直在尝试,但不断出现分段错误。 @chux
猜你喜欢
  • 2017-09-25
  • 2011-07-24
  • 2022-01-17
  • 2012-08-15
  • 2014-01-29
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多