Se tu hai questi indirizzi di memoria:
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.codice:mat01 0x1000 mat02 0x1a00 mat03 0x1b00
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:
Tutto questo se ho capito bene cosa vuoi fare, perché non è spiegato molto chiaramente.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; }
Spero sia questa la tua richiesta.

Rispondi quotando