取消引用char * array []并存储在char ** array [](C)中

问题描述 投票:0回答:1

编辑。抱歉,以前提供的最少信息

说我有以下代码:

    char ** a[16];
    a[15] = '\0';

    int i;
    for (i = 0; i < 5; i++) {

        char * b[3];
        b[2] = '\0';

        b[0] = "foo";
        b[1] = "bar";

        if (i == 4) {
            b[0] = "hello";
            b[1] = "world";
        }

        a[i] = b;
    }

在for循环之后,如果我包括以下两行,则直接:

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

我希望输出为:

foo bar
hello world

但是它是:

hello world
hello world

我知道这是因为我的声明a[i] = b;,其中b是char指针的数组。在每个循环中,b [0]和b [1]指向的字符指针都会改变。

在最后一个循环中,它们分别设置为“ hello”和“ world”。由于我将b分配给a [i],所以a的每个索引现在都指向同一事物。

[我想做的是解除对b的引用,这样a [i]被赋予值b指向而不是b本身。因此,循环后,a的所有索引都不相同。

我尝试使用以下内容,但均导致分段错误:

*a[i] = *b**a[i] = **b

任何帮助将不胜感激,因为我完全迷路了。谢谢:)

c arrays string pointers
1个回答
0
投票

[我想做的是解除对b的引用,这样a [i]被赋予值b指向而不是b本身。因此,循环后,a的所有索引都不相同。

请注意,b本身是一个数组,因此您不能仅分配value b points to rather than b itself,因为b并不指向单个值。

要真正做到这一点(不确定为什么要这么做),请替换行:

a [i] = b;

a[i][0] = b[0];
a[i][1] = b[1];
a[i][2] = b[2];
© www.soinside.com 2019 - 2024. All rights reserved.