[C] Problème dans mon code
Résolu/Fermé
linksys23
Messages postés
133
Date d'inscription
samedi 16 février 2008
Statut
Membre
Dernière intervention
30 décembre 2010
-
13 sept. 2008 à 16:36
linksys23 Messages postés 133 Date d'inscription samedi 16 février 2008 Statut Membre Dernière intervention 30 décembre 2010 - 14 sept. 2008 à 17:49
linksys23 Messages postés 133 Date d'inscription samedi 16 février 2008 Statut Membre Dernière intervention 30 décembre 2010 - 14 sept. 2008 à 17:49
A voir également:
- [C] Problème dans mon code
- Code asci - Guide
- Code puk bloqué - Guide
- Code telephone oublié - Guide
- Code activation windows 10 - Guide
- Code gta 4 ps4 - Guide
12 réponses
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
13 sept. 2008 à 17:35
13 sept. 2008 à 17:35
hello
fread retourne le nombres d'éléments lus donc buffer = fread .. est incorrect
fread retourne le nombres d'éléments lus donc buffer = fread .. est incorrect
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
13 sept. 2008 à 18:13
13 sept. 2008 à 18:13
fread suffit puisqu'il va stocker les elements lu dans buffer pas besoin de metre buffer = fread
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
14 sept. 2008 à 09:24
14 sept. 2008 à 09:24
il est bon de tester ce que retourne fread puisque qu'une valeur nulle signife une erreur ou eof
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
14 sept. 2008 à 16:18
14 sept. 2008 à 16:18
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)
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)
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
13 sept. 2008 à 16:39
13 sept. 2008 à 16:39
Salut,
Tu dois allouer le tableau buffer ;)
Cdt
Tu dois allouer le tableau buffer ;)
Cdt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
linksys23
Messages postés
133
Date d'inscription
samedi 16 février 2008
Statut
Membre
Dernière intervention
30 décembre 2010
27
13 sept. 2008 à 16:46
13 sept. 2008 à 16:46
merci fiddy je viens d'allouer le tableau mais ca ne marche toujours pas :(
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
13 sept. 2008 à 16:57
13 sept. 2008 à 16:57
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
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
linksys23
Messages postés
133
Date d'inscription
samedi 16 février 2008
Statut
Membre
Dernière intervention
30 décembre 2010
27
13 sept. 2008 à 17:00
13 sept. 2008 à 17:00
ah oui dsl, il me dit : incompatible types in assigment
EDIT : l'erreur se trouve à la ligne 13
EDIT : l'erreur se trouve à la ligne 13
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
13 sept. 2008 à 17:07
13 sept. 2008 à 17:07
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.
linksys23
Messages postés
133
Date d'inscription
samedi 16 février 2008
Statut
Membre
Dernière intervention
30 décembre 2010
27
13 sept. 2008 à 18:07
13 sept. 2008 à 18:07
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 ?
linksys23
Messages postés
133
Date d'inscription
samedi 16 février 2008
Statut
Membre
Dernière intervention
30 décembre 2010
27
13 sept. 2008 à 19:01
13 sept. 2008 à 19:01
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.
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.
linksys23
Messages postés
133
Date d'inscription
samedi 16 février 2008
Statut
Membre
Dernière intervention
30 décembre 2010
27
14 sept. 2008 à 11:17
14 sept. 2008 à 11:17
je poste mon nouveau code :
il devrait marcher mais je ne comprends pas pourquoi il ne marche pas :(
#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 :(
linksys23
Messages postés
133
Date d'inscription
samedi 16 février 2008
Statut
Membre
Dernière intervention
30 décembre 2010
27
14 sept. 2008 à 17:49
14 sept. 2008 à 17:49
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 :
fiddy, dubcek et mype merci de m'avoir aider je n'y serai pas arriver sans vous :), je passe le sujet en résolu.
#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.