20) Che operazione esegue la funzione seguente? void foo(const char* pa, const char* pb, char* pc) { while(*pa) *pc++ = *pa++; while(*pb) *pc++ = *pb++; *pc=0; } Specificare i requisiti richiesti ai dati di input (pa, pb e pc) perche' l'esecuzione vada a buon fine. La funzione foo copia le stringhe puntate da pa e pc unendole nella stringa destinazione puntata da pc. Per vederlo, ecco riscritta la funzione in modo identico ma meno "criptico". void foo(const char* pa, const char* pb, char* pc) { int i,j; i=0; j=0; while(pa[i] != '\0') { /* fintanto che non ho raggiunto la fine della stringa pa */ pc[j] = pa[i]; /* copio il carattere i-esimo di pa nella posizione j-esima di pc */ i++; /* e incremento i contatori */ j++; } /* A questo punto pc e' uguale a pa escluso il \0 finale. Passiamo a copiare pb in pc, lasciando quindi il contatore di pc immutato per non sovrascrivere la parte appena scritta. */ i=0; while(pb[i] != '\0') { /* fintanto che non ho raggiunto la fine della stringa pb */ pc[j] = pb[i]; /* copio il carattere i-esimo di pb nella posizione j-esima di pc */ i++; /* e incremento i contatori */ j++; } /* A questo punto pc contiene contiguamente la copia di pa e pb. Per terminare correttamente, dobbiamo aggiungere il carattere \0 finale. */ pc[j] = '\0'; } La funzione quindi opera con due requisiti stretti: 1) pa e pb puntano stringhe terminate correttamente da caratteri \0 2) pc punta ad un'area di memoria abbastanza ampia da contenere le copie di pa e pb piu' il carattere \0 finale.