Du C au C++

nidhaletec Messages postés 44 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 28 mars 2009 - 16 juin 2008 à 00:52
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 16 juin 2008 à 13:20
si quelqu un m aide à convertir cette fonktion en C++ ; c écrit en C ;

void remplacer (char *filename, char *str,  char *occ)
{
    FILE *f = fopen(filename, "rb");
    char *buf;
    int size;

    if(!f) return;

    fseek(f, 0, SEEK_END);
    size = ftell(f);
   
    if((buf = (char*)malloc(size+1))) {
        char *pbuf = buf;        int lenocc strlen(occ), lenstr strlen(str), last = 0;

        fseek(f, 0, SEEK_SET);
        buf[fread(buf, 1, size, f)] = 0;

        fclose(f);
       /* On supprime le fichier dans le cas ou str est plus petit que occ ce qui laisserait des caractères "parasites" à la fin du fichier */
        remove(filename);

       /* Cependant, si la création du nouveau fichier échoue, on pert l'ancien OOPS */
        if((f = fopen(filename, "wb"))) {
            while((pbuf = strstr(pbuf, occ))) {
                int pos = (pbuf-buf);
                if(pos) fwrite(&buf[last], 1, (pos-last), f);
   
                fwrite(str, 1, lenstr, f);                pbuf +lenocc; last (pbuf-buf);
            }
   
            fwrite(&buf[last], 1, size-last, f);
        }

        free(buf);
    }

    if(f) fclose(f);
}

3 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
16 juin 2008 à 12:53
Ou est-ce marqué que cette fonction est en C ? elle est aussi en C++. Il n'y a rien a convertir.
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
16 juin 2008 à 13:14
Salut,

C'est peut être du C++ dans sur le plan syntaxique, mais ce n'en est pas sur le plan phylosophique.

Il faudrait remplacer les fopen par des stream, les malloc par des new...

En gros virer toutes les vielles include : stdio, stlib... par iostream et conosrts.

Cela dit pour le remove, je connais pas d'équivalent C++.

Un exemple de l'utilisation de stream pour lire un fichier ici.

fseek(f, 0, SEEK_END);
->
f.seekg(0, ios::end);

Pas à dire, l'objet, ça aura vraiment tout révolutionné !
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
16 juin 2008 à 13:20
Ah mais lol, j'aurais dû m'en douter !
Même auteur du topic...
0
Rejoignez-nous