Erreur debuggage

Signaler
Messages postés
2
Date d'inscription
mercredi 15 janvier 2003
Statut
Membre
Dernière intervention
16 janvier 2003
-
Messages postés
2
Date d'inscription
mercredi 15 janvier 2003
Statut
Membre
Dernière intervention
16 janvier 2003
-
Voilà mon problème, je suis débutant en C alors veuillez pardonner les fautes de voc que je pourrais faire :)
Don, en fait, j'ai créé une fonction sensée récuperer des données dans un fichier, je compile et tout se passe pour le mieux du monde mais lors de l'exécution ça plante. Je lance donc un débogage et je me rend compte que le prog arrive pas à sortir de ma fonction... il me renvoie une erreur 0xC0000005 avec des commentaires... je sais pas pourquoi, il me semble pourtant que mes pointeurs sont correctement utilisés mais bon...
Voilà la source :

static void configPin (char dir[], struct sPin tPin [])

{
char temp [10], *end;
int i, l;

//Ouverture du fichier en lecture seule
fich=fopen(dir, "r");

//On se "cale" au début de la définition des pins
do
{
fscanf(fich,"%s", temp);
}while (strcmp(temp, "PINS")!=0);

//On stocke les informations relatives aux pins dans le tableau
i=0;
fscanf(fich,"%s", temp);
do
{
//Calcul de la longueur de chaine jusqu'aux :
l=strcspn (temp, ":");
strncpy(tPin[i].nom, temp, l);
//Extraction du numero de pin et écriture dans la structure.
tPin[i].num=(int)strtod (temp+l+1, &end);
fscanf(fich,"%s", temp);
}while (strcmp(temp, "*")!=0);

fclose (fich);
}

Merci d'avance à l'aide que vous pourrez m'apporter...

2 réponses

Messages postés
249
Date d'inscription
mardi 16 juillet 2002
Statut
Membre
Dernière intervention
7 août 2003
2
-------------------------------
Réponse au message :
Le problème viens de ta méthode de lecture. En effet tu lui dis de lire avec le format %s. Personellement je ne lis jamais les données de cette manière (avec la sortie formatée style %type). Donc je ne peux pas t'assurer que ce soit l'erreur. D'autant plus que tu ne souligne pas l'endroit où ça plante.
Je te propose donc une autres fonction pour lire:

fread( &temp, sizeof( temp ), 1, fichierPtr );

Le premier arg est la raviable qui recevra la donée.
Le second la taille à lire ne octects
Le troisième le nombre de fois
Le dernier le pointeur de fichier

Mais avant d'utiliser cela je te conseil de l'ouvrir en mode binaire: "rb" au lieu de "r"

Je trouve que lire des donnée avec fread est beaucoup plus efficace. Il y a l'inverse qui fonctionne de la même manière, elle s'appelle fwrite.
-------------------------------

> Voilà mon problème, je suis débutant en C alors veuillez pardonner les fautes de voc que je pourrais faire :)
> Don, en fait, j'ai créé une fonction sensée récuperer des données dans un fichier, je compile et tout se passe pour le mieux du monde mais lors de l'exécution ça plante. Je lance donc un débogage et je me rend compte que le prog arrive pas à sortir de ma fonction... il me renvoie une erreur 0xC0000005 avec des commentaires... je sais pas pourquoi, il me semble pourtant que mes pointeurs sont correctement utilisés mais bon...
> Voilà la source :
>
> static void configPin (char dir[], struct sPin tPin [])
>
> {
> char temp [10], *end;
> int i, l;
>
> //Ouverture du fichier en lecture seule
> fich=fopen(dir, "r");
>
> //On se "cale" au début de la définition des pins
> do
> {
> fscanf(fich,"%s", temp);
> }while (strcmp(temp, "PINS")!=0);
>
> //On stocke les informations relatives aux pins dans le tableau
> i=0;
> fscanf(fich,"%s", temp);
> do
> {
> //Calcul de la longueur de chaine jusqu'aux :
> l=strcspn (temp, ":");
> strncpy(tPin[i].nom, temp, l);
> //Extraction du numero de pin et écriture dans la structure.
> tPin[i].num=(int)strtod (temp+l+1, &end);
> fscanf(fich,"%s", temp);
> }while (strcmp(temp, "*")!=0);
>
> fclose (fich);
> }
>
> Merci d'avance à l'aide que vous pourrez m'apporter...
>
>
Messages postés
2
Date d'inscription
mercredi 15 janvier 2003
Statut
Membre
Dernière intervention
16 janvier 2003

Merci beaucoup...
J'ai réussi à rêgler cette erreur autrement mais de façon un peu magique et mystérieuse, j'ai juste augmenté la taille de ma chaine temp pour la mettre à 20 et hop ça marche....