[C] Problème dans mon code

Résolu
linksys23 Messages postés 140 Statut Membre -  
linksys23 Messages postés 140 Statut Membre -
Bonjour,

J'ai un problème lorsque je compile mon code mais je ne vois pas l'erreur :

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    FILE *fichier = NULL, *cpyFichier = NULL ;
    char  *buffer;
    int continuer = 1;
    fichier = fopen("fichier.exe", "rb+");
    
    if(fichier != NULL)
     {
              buffer = fread(buffer, sizeof(int), sizeof(char), fichier);
              fwrite(buffer, sizeof(int), sizeof(char), cpyFichier);
     }
    
fclose(fichier);
  
  system("PAUSE");	
  return 0;
}


Avez vous une idée de ce qui ne va pas ?

Cordialement, linksys23.
Configuration: Windows XP
Firefox 3.0.1

12 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    fread retourne le nombres d'éléments lus donc buffer = fread .. est incorrect
    1
  2. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    fread suffit puisqu'il va stocker les elements lu dans buffer pas besoin de metre buffer = fread
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      il est bon de tester ce que retourne fread puisque qu'une valeur nulle signife une erreur ou eof
      -1
  3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Re,
    cpyfichier est ouvert en lecture et non écriture. Ouvre le avec le droit "w" plutôt que "r".
    De plus c'est mieux de faire :
    fopen(fichier,...);
    if(fichier ==NULL) exit(-1);
    fopen(cpyfichier,...);
    if(cpyfichier==NULL) exit(-1);

    Sinon t'auras des messages d'erreur, en voulant fermer le fichier par exemple dans ton cas.

    Tu as toujours une erreur dans fread et fwrite avec les sizeof.
    sizeof(int) renvoie 4 et sizeof(char) renvoie 1, donc tu ne vas pas copier une grande chaîne.
    Peut-être que tu voulais faire sizeof(char), sizeof(buffer)/sizeof(char)
    0
  4. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Salut,
    Tu dois allouer le tableau buffer ;)
    Cdt
    -1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. linksys23 Messages postés 140 Statut Membre 27
     
    merci fiddy je viens d'allouer le tableau mais ca ne marche toujours pas :(
    -1
  7. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Pourrais-tu donner le message que retourne ton compilateur, sinon c'est dur d'aider ^^.
    Sinon il y a des erreurs dans ton code.
    cpyFichier n'est pas initialisé avec fopen.
    sizeof(continuer) va retourner 4, et non 1.
    Cdt
    -1
  8. linksys23 Messages postés 140 Statut Membre 27
     
    ah oui dsl, il me dit : incompatible types in assigment

    EDIT : l'erreur se trouve à la ligne 13
    -1
  9. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Prends en compte les remarques que je t'ai fait dans le post précédent. Poste la correction apportée à ton code, et fais un copier coller du message d'erreur car là tu ne me donnes pas le numéro de la ligne.
    -1
  10. linksys23 Messages postés 140 Statut Membre 27
     
    ah d'accord donc si je veux lire les éléments du fichier (et pas le nombre qu'il y en a) quel fonction je doit utiliser ?
    -1
  11. linksys23 Messages postés 140 Statut Membre 27
     
    ah oui j'avais mal compris la réponse de dubcek donc après plusieurs essai j'ai réussi à ouvrir un executable, copier son contenu dans le buffer et enregistrer celui ci dans un fichier .txt que j'avais au préalable renommé en .exe, mais voila lorsque je lance ce dernier rien ne se passe (la console disparait en un clin d'oeil) je pense que ca vient du fait que j'ai écris dans un fichier texte malgré l'avoir renommer en .exe
    j'aimerai savoir si mon problème vient bien de là et comment faire pour y remédier.

    j'espère avoir été clair, faite le moi savoir si ca n'est pas le cas.
    -1
  12. linksys23 Messages postés 140 Statut Membre 27
     
    je poste mon nouveau code :

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
        FILE *fichier = NULL, *cpyFichier = NULL ;
        char  buffer[5000];
        int continuer = 4;
        fichier = fopen("calculatrice.exe", "rb+"); //ouverture de calculatrice.exe
        cpyFichier = fopen("test.exe","rb+"); //ouverture d'un .exe vide (fichier .txt renommé en .exe)
        if(fichier && cpyFichier != NULL)
         {
                  if(fread(buffer, sizeof(int), sizeof(char), fichier) != 0); //copie le contenu du fichier dans le buffer
                  fwrite(buffer, sizeof(int), sizeof(char), cpyFichier); //copie le buffer (donc le fichier calculatrice .exe) dans le .exe vide
         }
        
    fclose(fichier);
    fclose(cpyFichier);
      system("PAUSE");	
      return 0;
    }


    il devrait marcher mais je ne comprends pas pourquoi il ne marche pas :(
    -1
  13. linksys23 Messages postés 140 Statut Membre 27
     
    Ca y est ca marche! en fait je n'avais pas bien saisie l'utilité des sizeof de ces fonctions, voici mon code final qui marche :

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
        FILE *fichier = NULL, *cpyFichier = NULL ;
        char  buffer[16900];
        fichier = fopen("calculatrice.exe", "rb+");
            if(fichier == NULL)
               exit(-1); 
        cpyFichier = fopen("test.exe","wb+");
            if(cpyFichier == NULL)
               exit(-1); 
         
                  if(fread(buffer, sizeof(buffer), sizeof(char), fichier) != 0);
                  fwrite(buffer, sizeof(buffer), sizeof(char), cpyFichier);
        
    fclose(fichier);
    fclose(cpyFichier);
      system("PAUSE");	
      return 0;
    }


    fiddy, dubcek et mype merci de m'avoir aider je n'y serai pas arriver sans vous :), je passe le sujet en résolu.
    -1