Fantastico!! Sto risolvendo anche tutti gli esercizi con i char!!
Se mi blocco, arrivo al procedimento attraverso il risultato, sperando di non incontrare ambiguità, e quindi il gioco è fatto...

Ho risolto anche il codice qui sotto, anche se sono giunto appunto ad una ambiguità per quanto riguarda il comando str2--.
Ora ti spiego: riesco in entrambi i casi a stampare "pjpqo" però ho un dubbio per quanto riguarda str2--. La seconda stringa parte dal terzo carattere, quindi è "PPO", e facendo lo str2-- ottengo "IPPO". Ora, quando vado a rifarlo, l'indice è J è 1, quindi teoricamente mi rimane sempre "IPPO" e il puntatore mi passa dalla P alla I? Poi J = 2 e devo rifare lo str2--, quindi cambia semplicemente il puntatore che va a dalla terza P alla seconda P? In questo caso, per arrivare la soluzione devo contare anche il sesto carattere "\0", altrimenti terminerei con O = O, senza arrivare alla soluzione.

Oppure, nell'altro caso che ho provato, ogni volta che ho str2--, indipendentemente dal valore dell'indice, scalo di uno la cella, quindi diventa prima "IPPO", poi "PIPPO".
Però in questo caso "sforerei", nel senso che la terza volta che devo eseguire str2--, non ho più celle da decrementare e quindi dovrei ottenere una violazione d'accesso.

Spero di non aver creato troppa confusione...
grazie di tutto MItaly, sei stato gentilissimo e molto disponibile; sei riuscito a farmi risolvere esercizi sui quali non sapevo neanche dove mettere mano :P


codice:
Se f1 è definita come:
char *f1(char *str1, char *str2) {
int i=0, j=0;
while (str1[i])
if (str1[i++]==str2[j]) {j++; str2--;}
else str1[j]++;
return str1;}
Cosa stampa il seguente frammento di codice?
char str[]="pippo";
printf("\n%s\n", f1(str, str+2));