Mi sembra che tu non abbia accodato la parte finale della stringa.
La stringa testo dovrebbe essere abbastanza grande da permettere l'inserimento
di una sequenza di caratteri più lunga di quella da sostituire.
Sicuramente, poi, è bene utilizzare una stringa temporanea 'di appoggio'.
In poche parole io farei così:
codice:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_STR 400
int repsubstr( char *testo, char *chiave, char *scambio)
{
int i, s, j, ltesto=strlen(testo), lchiave=strlen(chiave);
char risultato[MAX_STR]="";
for(i=0; i<ltesto; i++)
{
if( strncmp( &testo[i], chiave, lchiave)==0 )
{
strncpy( risultato, testo, i);
for(s=i, j=0; scambio[j]; )
risultato[s++]=scambio[j++];
j=i+lchiave;
strcpy( &risultato[s], &testo[j]);
strcpy( testo, risultato);
return i;
}
}
return 0;
}
int main()
{
char testo[MAX_STR]="Giovanni usci col bel tempo dopo una settimana e ando a comprarsi un gelato";
char chiave[] ="settimana";
char scambio[] ="giornata";
printf("---------------------------------\n");
printf("'%s'\n", testo);
printf("---------------------------------\n");
printf("la chiave e: '%s'\n", chiave);
printf("---------------------------------\n");
repsubstr( testo, chiave, scambio);
printf("'%s'\n", testo);
return 0;
}