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 :

Erreur avec strcat


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2003
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2003
    Messages : 205
    Par défaut Erreur avec strcat
    Bonjour

    Malgrè de nombreuse recherche, je n'arive pas à trouver pourquoi j'ai une erreur à la ligne "strcat(final, resultat);" Borland me met:
    Mauvaise correspondance de type dans le paramètre '__src' ('const signed char *' désiré, 'int' obtenu)
    Voici mon 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
      char* source=NULL;
      char* dest=NULL;
      char* option=NULL;
      char* final=NULL;
      char* temp=NULL;
      FILE* fichierSource=NULL;
      FILE* fichierDest=NULL;
      int i,j,tabCaract[8];
      unsigned char code;
      unsigned char  resultat;
      long taille_fichier;
      if(fichierSource = fopen(source, "r+"))
          {
          taille_fichier = filesize (fichierSource);
          temp=(char *)malloc(sizeof(char) * taille_fichier);
          final=(char *)malloc(sizeof(char) * taille_fichier);
          fread (temp,1,taille_fichier,fichierSource);
          fclose(fichierSource);
          }
          if(fichierDest = fopen(dest,"w"))
            {
            for (i=0;i<taille_fichier;i++)
              {
              code = temp[i];
              for(j=0;j<8;j++)
                {
                tabCaract[j] = (code>127?1:0) ;
                code<<=1;
                }
              resultat = (128*tabCaract[0])+(64*tabCaract[1])+(32*tabCaract[2])+(16*tabCaract[3])+(8*tabCaract[4])+(4*tabCaract[5])+(2*tabCaract[6])+(1*tabCaract[7]);
              strcat(final, resultat);
              }
            fputc(resultat,fichierDest);
            fclose(fichierDest);
          }
        }
    le but pour l'instant est de bien lire un fichier et de bien ecrire dans un fichier.

    tabCaract[] est un tableau contenant les valeurs binaire du caractère lu car après je doit y appliquer le codage lucifer.

    Merci d'avance

    Nixonne

  2. #2
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par nixonne
    Bonjour

    Malgrè de nombreuse recherche, je n'arive pas à trouver pourquoi j'ai une erreur à la ligne "strcat(final, resultat);" Borland me met:
    Mauvaise correspondance de type dans le paramètre '__src' ('const signed char *' désiré, 'int' obtenu)
    Faut lire le manuel : http://www.linux-kheops.com/doc/man/.../strcat.3.html

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2003
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2003
    Messages : 205
    Par défaut
    je l'avais lu mais ca n'avait rien arrangé, c'est pour ca que je vous pose la quetion.

    Nixonne

    PS: j'ai mal copier mon code et il faut lire final = strcat(final, resultat);

  4. #4
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    strcat() demande une chaine de caractère en 2eme paramètre. Et toi, tu lui mets un "unsigned char".
    Il faut aussi lire les messages renvoyés par le compilo.

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par nixonne
    je l'avais lu mais ca n'avait rien arrangé, c'est pour ca que je vous pose la quetion.
    alors tu n'as pas compris la doc. Regarde bien le type des paramètres : strcat() concatène des chaines, pas un caractère avec une chaine. Pour faire ça, tu peux utiliser sprintf() avec "%s" et "%c".

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2003
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juin 2003
    Messages : 205
    Par défaut
    ok, j'ai mieu compris maintenant mais j'ai toujour un problème.

    Quand je fais sprintf(final, "%s%c",final, resultat); qui normalement devrait me metre dans final ce qu'il avait déjà plus resultat, in ne me met que resultat et donc il non concatene pas ma chaine et mon caractère.

    Si vous avez comment faire?

    Merci d'avance

    Nixonne

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Citation Envoyé par nixonne
    sprintf(final, "%s%c",final, resultat);
    Comportement indéfini.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char ajout[2];
     
    /* ... */
    ajout[0] = (char)resultat;
    ajout[1] = '\0';
    strcat(final, ajout);
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par nixonne
    Quand je fais sprintf(final, "%s%c",final, resultat); qui normalement devrait me metre dans final ce qu'il avait déjà plus resultat, in ne me met que resultat et donc il non concatene pas ma chaine et mon caractère.
    Comportement indéfini. La chaine de destination doit être différente de la chaine source... C'est écrit dans la doc de sprintf(). Quand on utilise une fonction, il n'est pas inutile de lire la doc...
    Si vous avez comment faire?
    Utiliser un tableau de char différent pour le résultat... Il doit être suffisamment grand... On peut mesurer la taille nécessaire et allouer un bloc. Prévoir une place pour le 0 final...

    Au fait, c'est pas une FAQ ?

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

Discussions similaires

  1. Erreur avec la fonction strcat
    Par pascal1 dans le forum Débuter
    Réponses: 2
    Dernier message: 04/08/2009, 16h48
  2. Erreur avec strcat
    Par nixonne dans le forum C
    Réponses: 4
    Dernier message: 08/12/2006, 21h51
  3. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45
  4. Erreur avec les ADO
    Par megane dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/03/2004, 21h37
  5. Erreur avec WM_COMMAND (BN_CLICKED)
    Par cyberlewis dans le forum Windows
    Réponses: 2
    Dernier message: 09/02/2004, 00h25

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