Редактировать. Извините за минимальную информацию, включенную ранее
Скажем, у меня есть следующий код:
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 l oop, если я включу следующие две строки:
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 - массив указателей на символы. Каждый l oop, указатели на символы, на которые указывают b [0] и b [1], изменяются.
В финальном l oop они установлены на «привет» и «мир» соответственно. Поскольку я назначил b для a [i], каждый индекс a теперь указывает на одно и то же.
Я хотел бы разыменовать b, чтобы a [i] было присвоено значение b, на которое указывает а не сама b. Поэтому после l oop все индексы a не совпадают.
Я пробовал использовать следующее, но оба результата привели к ошибкам сегментации:
*a[i] = *b
и **a[i] = **b
Любая помощь будет принята с благодарностью, так как я полностью потерялся. Спасибо :)