Ciao, la tua funzione è corretta, scorretto è che char*s1 ="Salve, mondo!"; , non è un array ma una costante stringa, che quindi non puoi
modificare, basta sostituire con
chars1[] ="Salve, mondo!"; che potrà essere modificata.

La soluzione di
minomic applica proprio questa correzione, ma crea un array dinamico con la malloc, eviterei di usare costanti stringa visto la poca utilità.