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 :

comment augmenter la taille d'un tableau ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut comment augmenter la taille d'un tableau ?
    Bonjour, j'ai une fonction qui lit des nombres qui sont dans un fichier texte, puis elle calcule tous plein de choses.
    Pour lire mes données, je me suis inspiré de : http://emmanuel-delahaye.developpez....s.htm#fichiers

    Je vous poste une partie de ma fonction et ensuite je vous pose ma question

    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
     
    1) tout d'abord je fais mon fopen en vérifiant que mon fichier existe
    2) je crée un tableau de char destiné à recevoir la ligne lue par fgets
    char line[500];
    3) je parcours mon fichier jusqu'à la fin et je fais mes calculs
    while( (!feof(file)) & (fgets (line, sizeof line, file) != NULL) )
        {
    	char *p = strchr(line, '\n'); /* on cherche le caractere '\n' */
     
    	if(p==NULL) /* le caractere '\n' n'a pas ete trouve donc arret du programme */
    	{
    	    fprintf(stderr,"Error in file %s line %d in function %s : tabular line is too short. Increase size of tabular line.\nExit program\n",__FILE__,__LINE__,__FUNCTION__);
    	    exit(1);
    	}
     
    	if (p != NULL) /* le caractere '\n' a ete trouve */
    	    *p = 0;
     
    blabla
    } /* fin du while
    Donc pour l'instant, si mon tableau char est trop court, le prgm s'arrête et ensuite l'utilisateur doit augmenter la taille de line et il relance le prgm.

    J'aimerais faire une boucle while qui fait que si le caractère '\n' n'a pas été trouvé alors la taille du tableau line est augmentée de 50 par exemple.

    Lorsque je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char line[500];
    line[550];
    mon compilo me dit que la ligne line[550] n'a pas été prise en compte.

    Avez-vous une idée pour m'aider s'il vous plait ?

    Merci

  2. #2
    Membre confirmé Avatar de Marco85
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 210
    Par défaut
    Salut salseropom !!!

    Tu ne peux pas augmenter la taille d'un tableau ... Désolé !!! Par contre cherche du côté de la fonction malloc() qui pourrait peut-être solutionner ton problème (ATTENTION à l'utiliser correctement et à libérer l'espace mémoire alloué grâce à un free() ...) ...

    Marco85

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    ah exacte, je n'avais pas pensé à ça. Je vais regarder le realloc et calloc.
    Merci !

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Il faut que tu alloues le buffer de lecture par un malloc, puis si le buffer est trop court, tu les réalloues avec un realloc, cherche sur ce forum, la maneuvre a déjà été décrite (au moins par moi dans le cas de stdin, j'espère que ça n'a pas disparu ).
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut Trap D, je vois comment utiliser realloc, mais pour le malloc, voici mon nouveau code. J'ai simplement remplacé la ligne
    par la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char *line=malloc(500*sizeof(*line));
    Mais là, dès la 1e ligne, j'ai mon message d'erreur disant que la taille est trop petite (alors qu'avant c'était vers la 3000e ligne.

    Je suis un peu séché

    J'ai bien mis mon free(line); à la fin de la fonction.

  6. #6
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Mais là, dès la 1e ligne, j'ai mon message d'erreur disant que la taille est trop petite (alors qu'avant c'était vers la 3000e ligne.
    Je parie que tu fais quelque chose du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (taille de ligne > sizeof(ligne))
      {
      printf("Taille de ligne trop petite!!!\n");
      }
    Or avant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char ligne[500]; //sizeof(ligne) rend 500*sizeof(char)
    et maintenant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char *ligne = malloc(500*sizeof(char)); //sizeof(ligne) rend la taille d'un pointeur...
    Jc

Discussions similaires

  1. comment augmenter la taille de line dans dbms_output
    Par lifeisgood dans le forum SQL
    Réponses: 13
    Dernier message: 17/01/2007, 15h10
  2. Réponses: 13
    Dernier message: 07/05/2006, 11h54
  3. Comment récupérer la taille d'un tableau dynamique ?
    Par Tchaill39 dans le forum Langage
    Réponses: 4
    Dernier message: 08/12/2005, 14h21
  4. [Tableaux] Comment connaitre la taille d'un tableau?
    Par Polaire76 dans le forum Langage
    Réponses: 2
    Dernier message: 21/11/2005, 17h34
  5. [Tableau]comment connaitre la taille d'un tableau à 2 dimensions
    Par Kyti dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 22/04/2005, 10h27

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