#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
{
FILE* fsrc;
FILE* fdst;
char* szfind;
char* szreplace;
char* buf;
char* p1;
char* p2;
int len;
int lenfind;
int lenreplace;
// ouverture fichier source et destination (en binaire pour éviter la transformation des \r\n)
fsrc = fopen(argv[1], "rb");
fdst = fopen(argv[2], "wb");
szfind = argv[3];
szreplace = argv[4];
lenfind = strlen(szfind);
lenreplace = strlen(szreplace);
// taille fichier source
fseek(fsrc, 0, SEEK_END);
len = ftell(fsrc);
fseek(fsrc, 0, SEEK_SET);
// lecture fichier source
buf = malloc(len+1);
fread(buf, 1, len, fsrc);
buf[len] = '\0';
// boucle de recherche
p1 = buf;
while((p2 = strstr(p1, szfind)) != NULL)
{
// écriture du texte situé entre p1 et p2
fwrite(p1, 1, p2-p1, fdst);
// remplacement du texte
fwrite(szreplace, 1, lenreplace, fdst);
// on se déplace à la fin du texte trouvé
p1 = p2+lenfind;
}
// on recopie la fin du fichier (de p1 à buf+len)
if(buf+len-p1 > 0)
fwrite(p1, 1, buf+len-p1, fdst);
// fermeture fichiers, libération mémoire
fclose(fsrc);
fclose(fdst);
free(buf);
return 0;
}