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 :

Probleme de tableaux


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 23
    Par défaut Probleme de tableaux
    Bonjour a tous ,

    J'ai un souci de taille de tableaux de char (sans parler de l affectation des valeurs du tableau) .
    Dans une boucle for qui contient un switch je découpe un tableau en plusieurs petits en fonction de conditions.j ai un char tab[40] et 5 char[10] , en fonction de conditions je récupère dans les petits un ou deux caractères du grand.
    A l arrivée les petits tableaux font 83 , 63 caractères ! et contiennent du grand n importe quoi.
    ci-dessous le code récalcitrant :
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
       for(int z=0;z<strlen(trame);z++)
     {
     
      switch (nb_char)
     
      {
     
       case 0:
     
    		  if(trame[i]!='f')
    	  {   
    		  cut_pcb[j]=trame[i];
    		  j++;
    		  c1=1;
     
    	  }
     
     
    	  else if(trame[i]=='f')
    	  {
    		  j=0;
    		  if (c1==0)
    		  { strcpy(cut_pcb,tableau_rien);nb_char++;}
    		  else
    		  {
     
    		  nb_char++;
    		  }
     
    	  };i++;break;
     
       case 1:
     
            if(trame[i]!='f')
    	  {
    		  cut_pds[j]=trame[i];
    		  j++;
    		  c2=1;
     
    	  }
    	  else if(trame[i]=='f')
    	  {
    		  j=0;
    		  if(c2==0)
    		  { strcpy(cut_pds,tableau_rien);nb_char++;}
     
    	  else 
    	  {   		  
    		  nb_char++;
    		  	      }
    		}
    	;i++	;break;
       case 2:
     
    	        if(trame[i]!='f')
    	  {
    		  cut_dlt[j]=trame[i];
    		  j++;
    		  c3=1;
     
    	  }
    	  else if(trame[i]=='f')
    	  {
    		  j=0;
    		  if(c3==0)
    		  { cut_dlt[0]='0';nb_char++;}
     
    	  else
    	  {  		  
    		  nb_char++;
    	  }
    			}
    			 ;i++;break;
       case 3:      
    	        if(trame[i]!='f')
    	  {
    		  cut_dlv[j]=trame[i];
    		  j++;
    		  c4=1;
    		  	  }
     
    	 else if (trame[i]=='f')
    	 {
    		 j=0;
    		 if(c4==0)
    	 { cut_dlv[0]='0';nb_char++;}
     
    	  else 
    	  {   	 
    		 br=TRUE;
    	  }
      };break;
     
     
      }
      ;break;
     }
    Merci d'avance.

    Edit : reponse : En lieu et place du \0 j'ai placé la lettre f comme marqueur de fin de chaine ou tableau (pour des raisons liées au programme) .La chaine du grand tableau est donc de type char,char,f,char,f,char,char,f...

  2. #2
    Expert confirmé
    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
    Par défaut
    Tu as probablement oublié de marquer la chaîne de caractères dans tes petits tableaux comme terminée en la complétant par 0 (ou '\0') à la fin

  3. #3
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Citation Envoyé par NoX_cpp
    Edit : reponse : En lieu et place du \0 j'ai placé la lettre f comme marqueur de fin de chaine ou tableau (pour des raisons liées au programme) .La chaine du grand tableau est donc de type char,char,f,char,f,char,char,f...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int z=0;z<strlen(trame);z++)
    Si tu n'as pas de caractère de fin de chaine ('\0') dans ton tableau de caractères "trame" alors strlen() te retournera la longueur correspondant au premier '\0' rencontré dans la mémoire qui suit l'espace alloué pour ton tableau.

  4. #4
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    for(int z=0;z<strlen(trame);z++)
    La longueur de trame ne change pas.
    Pourquoi la recalculer à chaque tour de boucle ?
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 23
    Par défaut réponse
    J'ai un \0 a la fin de mon tableau trame et sinon c est vrai pourquoi le recalculer ? je vais donc mettre une valeur en dur ... seulement la n'est pas le problème que je rencontre :/

    Finalement je présente mes plus plates excuses le problème venait bien du manque de '\0' Désolé , et surtout un grand merci a vous .

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

Discussions similaires

  1. VBA Excel- Probleme de tableaux!
    Par mehdi00 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/03/2008, 10h19
  2. probleme alignement tableaux
    Par Invité dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 04/05/2007, 13h50
  3. Probleme de tableaux
    Par X-plode dans le forum Langage
    Réponses: 3
    Dernier message: 16/03/2007, 11h57
  4. [Tableaux] probleme de tableaux
    Par davmaster62 dans le forum Langage
    Réponses: 3
    Dernier message: 05/03/2006, 21h08
  5. Réponses: 6
    Dernier message: 04/04/2003, 15h28

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