Swap array di char

di il
1 risposte

Swap array di char

Ciao a tutti raga...Ho dei problemi ad implementare un metodo in cui gli passi due array di caratteri e mi ritorni il valore scammbiato. Ho provato a fare così:

char*cambia(char* a, char* b)
{
    char* tmp;
    strcpy(a,tmp;
    strcpy(a,b);
    strcpy(b,tmp);

}
Così facendo il programma si blocca a tempo di esecuzione...come potrei risolvere?

1 Risposte

  • Re: Swap array di char

    Ciao, il tuo codice non funziona perchè non hai allocato la memoria temporanea in cui copiare la prima stringa ed allora quando fai il primo strcpy copi la stringa in una posizione a caso nella memoria ram. Per risolvere puoi fare così:
    char*cambia(char* a, char* b)
    {
        char* tmp=malloc(strlen(a)+1);
        strcpy(tmp, a);
        strcpy(a, b);
        strcpy(b, tmp);
        free(tmp);
    }
    Stai attento che le due stringhe abbiamo la stessa lunghezza prima ri richiamare la funzione, altrimenti si verificherebbe un buffer overflow e scriveresti oltre la fine di una delle due stringhe con risultati inprevedibili.

    Io, però, ti consiglio di non utilizzare questo metodo per fare lo swap delle stringhe, ma di procedere in quest'altro modo: scambio tra loro il primo carattere della prima stringa col primo carattere della seconda, poi il secondo carattere della prima col secondo carattere della seconda e così via. In questo modo la funzione occuparà molta meno memoria.

    Ciao.
Devi accedere o registrarti per scrivere nel forum
1 risposte