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 :

strcat ne compile pas [Débutant(e)]


Sujet :

C

  1. #1
    Membre éclairé Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Par défaut strcat ne compile pas
    Bonjour,

    Je suis encore dans l'apprentissage des fonctions standard permettant la manipulation de caractères et/ou de chaines de caractères.
    J'ai un problème sur un petit code utilisant la fonction STRCAT

    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
     
    #include <stdio.h>                                  
    #include <stdlib.h>                                 
    #include <errno.h>                                  
    #include <string.h>                                 
    /*------ MAIN    --------------------------------*/ 
    int main(void)                                      
    {                                                   
     char hexIndex[6] = "0x";                           
     char CPC[3] = "4b";      
     
     strcat(hexIndex,CPC[0]);                 
     printf("index hexa %s\n ",hexIndex);     
     return(0);                                         
    }
    Ce code ne se compile pas, j'ai une erreur concernant le STRCAT
    A parameter of type "const char *" cannot be initialized with an expression of type "char".
    Pourquoi ne puis je pas concatener la chaine hexIndex avec le premier caractère de la chaine CPC ?
    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Par défaut
    regarde les arguments que tu mets ! D'un côté tu mets correctement hexIndex et dans l'autre tu mets CPC[0]... Tu crois pas qu'il y a un problème là ?

    PS : return n'est pas une fonction, alors ne mets pas les parenthèses autour du 0, ça sert à rien.

  3. #3
    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
    Normal car CPC[0] est un char.... tu dois concanter deux chaines ...

    utilise plutôt :

    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

  4. #4
    Membre éclairé Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Par défaut
    J'ai mis CPC[0] car je veux uniquement concaténer le 1ier caratère de la chaine CPC (j'ai testé avec CPC[1] c'est idem...

    En fait je fais ce test car j'ai des valeurs qui sont dans un tableau, que je voudrai concaténer avec la chaine "0x".

    Est il impossible de fait ce type d'opération avec strcat ?

  5. #5
    Membre confirmé Avatar de Beldom
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 63
    Par défaut
    Si tu ne veux qu'un seul élément, utilise strncat.

    man de strncat.

    En lui passant l'adresse de l'élément de ton tableau : &CPC[0]
    Et en mettant une taille de 1.

    Si tu n'as pas tout compris, n'hésite pas à demander plus de détails.

  6. #6
    Membre éclairé Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Par défaut
    Merci pour ses informations. T'as réponse m'a donnée un piste que j'ai voulu tester est qui fonctionne....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <stdio.h>                                 
    #include <stdlib.h>                                
    #include <errno.h>                                 
    #include <string.h>                                
    /*------ MAIN    --------------------------------*/
    int main(void)                                     
    {                                                  
     char hexIndex[6] = "0x";                          
     char CPC[3] = "4b";                               
               strcat(hexIndex,&CPC[1]);               
               printf("index hexa %s\n ",hexIndex);    
     return(0);                                        
    }
    ça compile est ça marche...
    Je vais tout de même regarder la fonction STRNCAT.
    J'ai vraiment du mal avec ces notions de pointeurs. J'ai un peu de mal à comprendre pourquoi pour le premier argument je n'ai pas besoin de presicer que je passe l'adresse alors que pour le second je dois le presicer.

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par SPACHFR Voir le message
    J'ai vraiment du mal avec ces notions de pointeurs. J'ai un peu de mal à comprendre pourquoi pour le premier argument je n'ai pas besoin de presicer que je passe l'adresse alors que pour le second je dois le presicer.

    C'est très simple...

    Dans le premier argument, tu passes le nom du tableau, qui est équivalent à l'adresse du premier élément...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hexIndex == &hexIndex[0]
    Alors que dans le second cas, tu passais un élément du tableau, et non pas son adresse...

  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 SPACHFR Voir le message
    Bonjour,

    Je suis encore dans l'apprentissage des fonctions standard permettant la manipulation de caractères et/ou de chaines de caractères.
    J'ai un problème sur un petit code utilisant la fonction STRCAT
    C'est pas STRCAT, mais strcat() (le C est sensible à la casse). Par contre, si tu veux recréer une fonction identique à celle de la bibliothèque, il faut bien utiliser un autre nom, sinon, le comportement est indéfini. Par exemple
    • STRCAT() (peu recommandé, car les majuscules sont plutôt réservées aux constantes).
    • strcat_()
    • mystrcat()
    • str_cat()

    etc.

  9. #9
    Membre éclairé Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Par défaut
    OK, merci pour ces précisions
    En testant un peu plus ce petit code, je me suis apperçu, que finalement ce code ne fonctionne pas comme je le souhaite, car le strcat() concatene le second argument jusqu'au caractère de fin de chaine (\0). Donc mon indice ne fait que me positionner dans cette chaine !!!!.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <stdio.h>                                  
    #include <stdlib.h>                                 
    #include <errno.h>                                  
    #include <string.h>                                 
    /*------ MAIN    --------------------------------*/ 
    int main(void)                                      
    {                                                   
     char hexIndex[6] = "0x";                           
     char CPC[3] = "4b";                                
               strcat(hexIndex,&CPC[0]);                
               printf("index hexa %s\n ",hexIndex);     
     return(0);                                         
    }
    sortie
    J'attendais 0x4...
    C'est pas grave j'ai appris des choses, je vais me pencher vers la fonction STRNCAT probablement plus appropriée....

    Merci à tous...

  10. #10
    Membre confirmé Avatar de Beldom
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 63
    Par défaut
    Ce n'est toujours pas bon.

    Si tu place ton index à 0 ou si tu ajoutes un caractère à ta chaine, ca mettra en plus tous les caractère à partir de celui que tu auras mis.

    Tu n'as pas le choix si tu ne veux qu"un caractère, c'est strncat, utilisé comme ceci :
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
               strcat(hexIndex,&CPC[1]);
    mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
               strncat(hexIndex,&CPC[1], 1);
    Sinon, tu iras jusqu'au bout de ta chaine, bout indiqué par un \0.
    J'espère avoir été suffisament clair ^^


    Edit : Vala ^^ Tu as compris avant que je poste :p

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    ce que tu veux faire c'est:

    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
     
     
    #include <stdio.h>                                  
    #include <stdlib.h>                                 
    #include <errno.h>                                  
    #include <string.h>                                 
    /*------ MAIN    --------------------------------*/ 
    int main(void)                                      
    {                                                   
     char hexIndex[6] = "0x";                           
     char CPC[3] = "4b";
               sprintf(&(hexIndex[2]), "%c", CPC[0]);                
               printf("index hexa %s\n ",hexIndex);     
     return(0);                                         
    }

  12. #12
    Membre éclairé Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    ce que tu veux faire c'est:

    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
     
     
    #include <stdio.h>                                  
    #include <stdlib.h>                                 
    #include <errno.h>                                  
    #include <string.h>                                 
    /*------ MAIN    --------------------------------*/ 
    int main(void)                                      
    {                                                   
     char hexIndex[6] = "0x";                           
     char CPC[3] = "4b";
               sprintf(&(hexIndex[2]), "%c", CPC[0]);                
               printf("index hexa %s\n ",hexIndex);     
     return(0);                                         
    }
    Oui ce code fonctionne..., encore une fonction à regarder: sprintf()

    Merci à tous, donc au programme strncat() & sprintf() à comprendre.

  13. #13
    Membre confirmé Avatar de Beldom
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 63
    Par défaut
    Si c'est bon, n'oublie pas le tag résolu

    Bonne soirée !

Discussions similaires

  1. Réponses: 10
    Dernier message: 06/03/2006, 10h15
  2. compile pas
    Par Bibouda dans le forum C
    Réponses: 7
    Dernier message: 08/11/2005, 17h02
  3. [WTK] HelloWorld qui compile pas
    Par metos256 dans le forum Java ME
    Réponses: 2
    Dernier message: 08/09/2005, 12h35
  4. [Delphi 2005] Librairie Word (Word_TLB) ne compile pas
    Par Brogomil dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 01/08/2005, 10h12
  5. Réponses: 5
    Dernier message: 01/08/2004, 01h11

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