编辑。抱歉,以前提供的最少信息
说我有以下代码:
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
任何帮助将不胜感激,因为我完全迷路了。谢谢:)
[我想做的是解除对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];