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 :

Fonction de fusion !?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 52
    Par défaut Fonction de fusion !?
    Bonjour,

    j'ai un petit soucis avec une fonction de fusion de deux champs en C...

    En entrée, on donne les deux champs qu'on doit concaténer + la longueur de ces deux champs + la longueur du champ de sortie
    En sortie, on obtient le champ concatené et sa longueur

    En prenant l'exemple suivant, j'ai un soucis :
    champ1 = "Voiture" (longueur = 7) et
    champ2 = "5556661" (longueur = 8)
    et taille champ de sortie = 45
    Lors de la fusion le dernier caractère le "1" disparaît... :/
    Je ne comprends pas pourquoi...
    A noter que cela fonctionne (pas d'effacement de dernier caractère) si on envoie "555666" (en gardant longueur = 8)

    J'imagine qu'il doit y avoir un problème de taille...

    voici la fonction
    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
    int FUSADR(char * strin1, char * strin2, char * strout, int * pilen1, int * pilen2, int * polen) 
    { 
         int i,slen; 
         int olen =  READINT(polen); 
         int ilen1 = READINT(pilen1); 
         int ilen2 = READINT(pilen2);
     
         for(i = 0; i<ilen1; i++) { 
             if(strin1[i] == ',') 
                strin1[i] = 0; 
         } 
         slen=strlen(strin1)+strlen(strin2); 
         if (slen > olen) 
            return(0); 
         strcpy(strout,strin1); 
         strcat(strout,", "); 
         strcat(strout,strin2); 
         slen=strlen(strout); 
         strout[slen]=' '; 
         return(1); 
    }
    merci !

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Ta chaîne de sortie n'est pas terminée par un '\0' mais par un caractère espace.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ehben Voir le message
    Bonjour,

    j'ai un petit soucis avec une fonction de fusion de deux champs en C...

    En entrée, on donne les deux champs qu'on doit concaténer + la longueur de ces deux champs + la longueur du champ de sortie
    En sortie, on obtient le champ concatené et sa longueur

    En prenant l'exemple suivant, j'ai un soucis :
    champ1 = "Voiture" (longueur = 7) et
    champ2 = "5556661" (longueur = 8)
    et taille champ de sortie = 45
    La remarque de jeroman est bonne. Et tu peux faire ta concaténation en une seule opération
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(strout, "%s%s", strin1, strin2)
    Et là, le sprintf() s'assurera lui-même du positionnement de '\0'
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 52
    Par défaut
    ok merci...
    c'est donc ça qui pose un problème ?

    Mais en quoi cet espace va éliminer le dernier caractère :/ ?

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Car tu écrases le '\0' avec cet espace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         slen=strlen(strout);
         strout[slen]=' ';
    Exemple en image. Si ta chaîne strout contient "Hello\0"
    slen sera égal à 5, car la chaîne contient 5 caractères. Or, strout[5] sera égal à '\0', car il ne faut pas oublier que l'indice 0 d'un tableau (au sens large) correspond à son premier élément :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    indice -> caractère
    0 -> H
    1 -> e
    2 -> l
    3 -> l
    4 -> o
    5 -> \0
    Par conséquent
    vire le '\0' pour le remplacer par un espace. En conclusion, ta chaîne a une longueur indéterminée et contient n'importe quoi.

    (Après, je n'ai pas regardé en profondeur le reste du code, tu n'as pas expliqué en détail ce qu'il est censé faire)

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

Discussions similaires

  1. appel de fonction boost::fusion::vector
    Par CedricMocquillon dans le forum C++
    Réponses: 5
    Dernier message: 10/08/2012, 19h26
  2. Fusion de cellules en fonction de leur valeur
    Par Eusebe dans le forum BIRT
    Réponses: 9
    Dernier message: 29/04/2010, 17h56
  3. [OL-2007] Fusion Word Outlook -> Confusion de Champs Titre et Fonction
    Par h.herry dans le forum Outlook
    Réponses: 0
    Dernier message: 27/04/2009, 12h34
  4. Fusion de cellules en fonction de leurs valeurs
    Par sisi37 dans le forum Composants
    Réponses: 1
    Dernier message: 28/10/2008, 14h40
  5. fonction extrusion, fusion en modelisation
    Par ADABLA dans le forum API graphiques
    Réponses: 9
    Dernier message: 09/02/2008, 11h33

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