IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

stack smashing detected lors d'une lecture de fichier


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Points : 13
    Points
    13
    Par défaut stack smashing detected lors d'une lecture de fichier
    Bonjour, j'ai un petit souci avec un petit programme C dont j'ai besoin pour mes cours mais malheureusement, je ne trouve pas la solution :s

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    #include <stdlib.h>
    #include <stdio.h>
    #include <glpk.h> /* l'entête de glpk */
     
     
    int main(int argc, char *argv[])
    {
     
        FILE* fichier = NULL;
        char type;
        fichier = fopen("exo6.txt", "r");
        int l2_nb_var_struc;
        int l3_nb_cont;
        int l4_nb_coeff;
        int* indice_ligne;
     
    	int a, b;
    	float c;
     
     
     
        if (fichier != NULL)
        {
            fscanf(fichier, "%s" , &type );
            printf("min/max : %s \n", &type);
     
    	fscanf(fichier, "%i" , &l2_nb_var_struc );
            printf(" nb_var_struc: %i \n", l2_nb_var_struc);
     
    	fscanf(fichier, "%i" , &l3_nb_cont );
            printf("nb_cont : %i \n", l3_nb_cont);
     
    	fscanf(fichier, "%i" , &l4_nb_coeff );
            printf("nb_coeff : %i \n", l4_nb_coeff);
     
            int tableau[l4_nb_coeff];
     
            int i =0 ;
    	for(i=0;i<l4_nb_coeff;i++){
    		printf("i vaut %i \t", i);
    		fscanf(fichier, "%i %i %f" , &a, &b, &c );
    		printf("indices : %i %i %f \n", a, b, c);
    		printf("abc \t");	
    	}
    	printf("test");
            fclose(fichier);
        }
     
        return 0;
    }
    Le fichier que je lis correspond bien à ce que je demande lors du scanf mais malheureusement lors du dernier appel de la boucle il me fait l'erreur.

    Si quelqu'un voit la boulette que j'ai pu faire je l'en remercie

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        char type;
    ....        fscanf(fichier, "%s" , &type );
    Le format %s demande un tableau en argument, pas un simple char.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Points : 13
    Points
    13
    Par défaut
    J'ai modifié en mettant

    char type[3]; /*la chaine sera de tte facon "max" ou "min"*/
    fscanf(fichier, "%s" , type );

    Et j'ai toujours la même erreur
    D'après l'exécution du programme, le souci survient à la sortie de ma boucle for

  4. #4
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Une chaine se fini par n '\0', donc il faut faire

    char type[4]; /*la chaine sera de tte facon "max" ou "min"*/
    fscanf(fichier, "%s" , type );



    Est ce que cela resoud ton erreur ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Points : 13
    Points
    13
    Par défaut
    Parfait !!!
    Merci beaucoup, le programme s'exécute parfaitement.
    J'aurais pu chercher longtemps en me focalisant sur ma boucle

    Encore Merci

  6. #6
    Membre habitué Avatar de Gui13
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Points : 133
    Points
    133
    Par défaut
    Fais quand même très attention:
    tu initialise ton tableau à 4 caractères, mais imagine que tu rencontres "maximum": tu fais péter ton tableau et tu vas écrire autre part.

    Je te conseille de prendre une valeur large (genre 200, on en est plus à compter les octets), et aussi de la mettre à zéro avant usage avec un petit memset(type, 0x0, 200);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/01/2013, 19h22
  2. [Batch] Problème avec caractère ! lors d'une lecture de fichier pour extraction
    Par damsmut dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 20/11/2012, 16h21
  3. Probleme lors d'une lecture de fichier XML VB2010
    Par nimbus629 dans le forum VB.NET
    Réponses: 6
    Dernier message: 17/06/2011, 12h51
  4. [PHP 5.3] Perte de caractères lors d'une lecture de fichier
    Par Vince57 dans le forum Langage
    Réponses: 2
    Dernier message: 28/08/2010, 19h03
  5. Réponses: 11
    Dernier message: 27/04/2006, 08h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo