Es una sintaxis de
inicialización no de asignación, el operador = no está definido en los arrays por lo que no puedes "reasignarlo in the way".
De hecho eso no es un array, puesto que los arrays no se pasan a las funciones, estas pasando un puntero char* al primer elemento.
Hay parches "chapuceros" como este:
#include <stdio.h>
#include <stdlib.h>
struct matriz
{
char a[9];
};
struct matriz matriz_a_inicial ();
int main ()
{
struct matriz a;
a = matriz_a_inicial();
return 0;
}
struct matriz matriz_a_inicial ()
{
struct matriz a= {1,2,3,4,5,6,7,8,9};
return a;
}
Si lo que quieres hacer es un mapa, quizás te convenga algo así:
typedef unsigned char Mapa[TAMANYOX][TAMANYOY+1];
void ElegirNivel(Mapa Nivel,short Eleccion)
{
Mapa Nivel1 =
{
{"XXXXXXXXXXXXXXXXXX"},
{"X X"},
{"X X"},
{"X H X"},
{"X X"},
{"X X"},
{"X X"},
{"X X"},
{"X X"},
{"X X"},
{"X X"},
{"X X"},
{"X X"},
{"X X"},
{"X C C C X"},
{"X X"},
{"X X"},
{"X X"},
{"X X"},
{"X X"},
{"X X"},
{"X F F F X"},
{"X X"},
{"X X"},
{"XXXXXXXXXXXXXXXXXX"}
};
Mapa Nivel2 =
{
{"XXXXXXXXXXXXXXXXXX"},
{"X X"},
{"XH C X"},
{"X XXXXXX XXXXXXXXX"},
{"X XXXXX X"},
{"X X C X"},
{"X X XXXXXX X"},
{"X X X"},
{"X X XXXXXX X"},
{"XX XXXXXCXXXXXXXXX"},
{"X C X X X"},
{"X X X X"},
{"XXXX XXX X X"},
{"X X X"},
{"X X X C X"},
{"X C X X X"},
{"X X X XXXXXXX"},
{"X X X X"},
{"X X X X"},
{"XXXXXXXX XXXXXXX X"},
{"XFF X"},
{"XFF CC X"},
{"XFF X"},
{"XFF X"},
{"XXXXXXXXXXXXXXXXXX"}
};
switch(Eleccion)
{
case 1:
TraspasarMapas(Nivel1,Nivel);
break;
case 2:
TraspasarMapas(Nivel2,Nivel);
break;
}
void TraspasarMapas(Mapa Nivel,Mapa Objetivo)
{
for (int j = 0; j < TAMANYOY; j++)
for (int i = 0; i < TAMANYOX; i++)
Objetivo[i][j] = Nivel[i][j];
}
O cargarlo desde un fichero externo.
Creo que como lo tengo en la función me estaré refiriendo al elemento 3,3 en lugar de a toda la matriz.
Que además no existe porque es una matriz de 3x3