0

我想在 C 中定义不同的字符串数组,然后可以根据其他值进行选择,例如:

char foo[][10] = {"Snakes", "on", "a", "Plane"};
char bar[][10] = {"Fishes", "in", "a", "Lake"};
char *choice;
if (flag == 1) {
  choice = &foo;
} else if (flag == 2) {
  choice = &bar;
} 
printf("%s%s\n", choice[0] , choice[1]); 

情况下的预期结果flag为 1:

蛇森

情况下的预期结果flag是 2:

鱼素

但是上面的代码给出了一个segmentation fault错误,而我尝试了不同的定义char,即char*char**。怎么做才对?有没有关于这个问题的好教程,即指针,数组,foo上面的例子到底是什么......

4

2 回答 2

5

如果你只使用指针数组会更容易:

int main(void)
{
  const char *foo[] = { "Snakes", "on", "a", "Plane" };
  const char *bar[] = { "Fishes", "in", "a", "Lake" };
  const int flag = 17;
  const char **choice = (flag == 1) ? foo : bar;

  printf("%s %s\n", choice[0], choice[1]);

  return 0;
}

以上印刷品

Fishes in
于 2013-06-24T11:12:23.133 回答
2

使用 char 数组,您需要:

char foo[][10] = {"Snakes", "on", "a", "Plane"};
char bar[][10] = {"Fishes", "in", "a", "Lake"};
char (*choice)[10];
if (flag == 1) {
    choice = &foo[0];
} else if (flag == 2) {
    choice = &bar[0];
} 
printf("%s%s\n", choice[0] , choice[1]); 

choice[1]引用正确的插槽,它必须是指向数组元素类型的指针并初始化为&foo[0]而不是&foo. 尽管它们是相同的地址,但它们是不同的数据类型。


如果您想choice成为指向 2-dim char 数组的指针,可以这样做,但您在声明指针时指定了两个数组维度并记住取消引用它:

char foo[][10] = {"Snakes", "on", "a", "Plane"};
char bar[][10] = {"Fishes", "in", "a", "Lake"};
char (*choice)[4][10];
if (flag == 1) {
    choice = &foo;
} else if (flag == 2) {
    choice = &bar;
} 
printf("%s%s\n", *choice[0] , *choice[1]); 
于 2013-06-24T11:24:06.330 回答