Overflow in implicit constant conversion: Veut dire?

Fermé
Linquisiteur - 26 avril 2013 à 21:33
 Linquisiteur - 29 avril 2013 à 22:11
Bonjour, j'écris une fonction qui lit du "faux hexa" dans un fichier texte. Le 1er hexa étant la taille. Mais j'ai quelque problème lors de la compilation:

Je vous 2 possibles erreurs, ma ligne:
if(c>='A' || c<='F') c=('F'-'lettre'+15);
Mais je ne vois pas comment faire autrement.
et mon fwrite (qui est le 1er que je fait donc surement une erreur)
fwrite(lettre, 1 * sizeof(int), 1, fichier_Bin);

lab.c:45: warning: overflow in implicit constant conversion
lab.c:69: warning: passing arg 1 of 'fwrite' makes pointer from integer without a cast
lab.c:87: error: parse error at end of input


#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
#include <fcntl.h>

#define fichierTexteHexa "hexa2.txt"
#define fichierBinaire "fichier.dat"
#define fichieTexte "fichier.txt"

/**
* Pré:
* @param fichierBin contier l'adresse d'un fichier binaire
* @param fichierHex contient un ficher texte contenant de l'hexadecimal
* Post:
* @param fichierBin contiendra l'hexa traitée
* @param fichierHex est inchangé
**/
void HexaToBin(char * fichierBin, char * fichierHex){
	
	FILE * fichier_Bin;
		//on ouvre le fichier binaire pour y écrire si il y a quelque chose on écrase les info
		if ((fichier_Bin = fopen(fichierBin,"wb"))==NULL) {
        perror("Write "); 
        exit(1);
		}
	
	FILE * fichier_Hex;
		
		//on ouvre le fichierHex pour lire les info dedans
		if ((fichier_Hex = fopen(fichierHex,"r"))==NULL) {
        perror("Read "); 
        exit(1);
		}
		int taille=0,i=0,j=0;
	    char c;
		
		/*temps que on n'as pas atteint la fin du fichier on lit*/
		while(c!=EOF){ 

		c=fgetc(fichier_Hex);  //on lit le charactère où se trouve le pointeur dans le fichier
			
			if(c>='A' || c<='F') c=('F'-'lettre'+15); //on transforme les lettres en chiffres
			
			if(i<2){ //les 2 premiers char donne la taille de la ligne
			taille=taille+c;
			i++;
			}
			if(i==2){
				int test_pair=taille%2; //on vérifie si la ligne contient un nombre paire ou impair de char
					if(test_pair==1) taille--;
			}
			
			if(i==2){
			int lettre;
			int l;
				while(j<taille){
				 lettre=fgetc(fichier_Hex); 
					if (l<2){
					lettre=lettre+c;
					l++;
					if(l==1) lettre=lettre*16;
					}
				    
					if (l==2){
					//fwrite(fichier_Bin,"%d",lettre);
					fwrite(lettre, 1 * sizeof(int), 1, fichier_Bin);  
					l=0;
					lettre=0;
					}
				 j++;
				 i=0;
				}
			}
		
        } 

int main (void){

	printf("Travail n°4, en C\n");
	
	HexaToBin(fichierBinaire,fichierTexteHexa);

return 0;
}


J'ai poster l'intégralité du code au cas où mais je suppose que seul les 2 lignes cité contiennent une erreur. J'ai lu de la docu sure le fwrite mais je suis pas sur de ma ligne
A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
27 avril 2013 à 10:25
if(c>='A' || c<='F') c=('F'-'lettre'+15);
C'est quoi lettre ?
On ne peut mettre qu'un caractère entre apostrophe. Cela correspond au code ascii de la lettre. Donc, 'lettre' est faux. Si tu parles de la variable lettre, il faut enlever les apostrophes. Par contre, ta variable lettre est définie plus bas dans le code, donc ça risque de ne pas plaire au compilateur.

fwrite(lettre, 1 * sizeof(int), 1, fichier_Bin);
A toutes fins utiles : http://www.linux-kheops.com/doc/man/manfr/man-ascii-0.9/man3/fwrite.3.txt.html
Tu vois que le prototype de fwrite est : size_t fwrite (const void *ptr, size_t size, size_t nmemb,
FILE *stream);
Ta variable lettre est de type int => Erreur. Il faut un pointeur pour que le programme aille lire dedans.

Cdlt,
0