Перемещение указателей на многомерный массив в C - несовместимые типы - PullRequest
0 голосов
/ 13 марта 2012

Вот очень простой пример того, что я пытаюсь сделать:

#include <stdio.h>

int main() {
  char a[2][2][5] = { {"hello", "world"}, {"again", "test1"}};

  a[1] = a[0];

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

Я ожидаю, что это напечатает: a [0] [0]: привет [0] [1]: мир a [1] [0]: привет a [1] [1]: мир

Вместо этого я получаю error: incompatible types in assignment

Ответы [ 2 ]

1 голос
/ 13 марта 2012

Вы не можете назначать массивы, вы должны скопировать их (используя memcpy или memmove)

memcpy(a[1], a[0], sizeof(a[0]));

Кроме того, каждая ваша строка имеет размер 6, а не 5 (есть неявный нулевой терминатор).

0 голосов
/ 13 марта 2012

Вы не можете назначать массивы.Тем не менее, вы можете назначить структуры:

struct Foo
{
    char data[2][5];
};

struct Foo b, a = { { "hello", "world" } };
b = a;

struct Foo c[2] = { { { "hello", "world" } }, { {"again", "test1"} } };
c[1] = c[0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...