Se tu hai questi indirizzi di memoria:
codice:
mat01 0x1000
mat02 0x1a00
mat03 0x1b00
Essendo mat01, mat02 e mat03 array e non puntatori (tra l' altro il nome non è significativo, chiamali semmai arr01, arr02 e arr03), il loro indirizzo è inassegnabile.
Cioè mat03 non può stare a sinistra di un assegnamento, ogni espressione di assegnamento che ha come lvalue mat03 è sbagliata.
Lo puoi fare con i puntatori tenendo conto che ogni parametro in C viene passato per valore, e tenendo conto che alla fine della funzione ogni variabile allocata nell stack (quindi un array ad esempio) viene deallocata.
Per cui devi usare l' allocazione dinamica:
codice:
void CatenaStr ( char A[], char B[], char** C )
{
// C è un puntatore a puntatore perché se fosse un puntatore a
// char, l' assegnamento sarebbe fatto solo sulla variabile di copia
// che è locale alla funzione
const unsigned long l1,l2;
l1=strlen(A);
l2=strlen(B);
// Ho memorizzato la lunghezza delle stringhe per evitare di chiamare
// troppe volte la strlen (sarebbe inefficiente)
*C=(char*)malloc( (strlen(A) + strlen(B) +1)*sizeof(char));
strcpy(*C,A);
strcpy( & ((*C)[l1]), B);
}
int main ()
{
char arr1[20], arr2[20], *ptr;
printf("Inserisci Testo01 : ");
scanf("%s",arr1);
printf("\nInserisci Testo02 : ");
scanf("%s",arr2);
// Richiamo la Funzione
CatenaStr ( arr1, arr2, &ptr);
return 0;
}
Tutto questo se ho capito bene cosa vuoi fare, perché non è spiegato molto chiaramente.
Spero sia questa la tua richiesta.