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 :

concaténation de char*


Sujet :

C

  1. #21
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    Ben si, il aime.
    Sauf si tu compiles en C++, bien entendu...

  2. #22
    Membre éprouvé Avatar de Jérémy Lefevre
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Luxembourg

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 898
    Points : 969
    Points
    969
    Par défaut
    en effet je compile en c++ mais je ne trouve pas ca logique en c!

  3. #23
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    C'est pourtant la norme du C.
    void* est implicitement convertible dans les deux sens...

    Ça permet de faire cette définition de NULL pour la plupart des compilateurs, réservant ainsi NULL aux pointeurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define NULL ((void*)0)
    Je dis la plupart, car il me semble que certains compilateurs possèdent une définition interne, genre #define NULL __null...

  4. #24
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par jerem2000
    en effet je compile en c++ mais je ne trouve pas ca logique en c!
    C'est pas logique et c'est un trou dans le système de types du C.

  5. #25
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par jerem2000
    en effet je compile en c++ mais je ne trouve pas ca logique en c!
    Moi je n'ai fait que de te donner une solution en C ANSI/ISO rien d'autre, après si tu compiles en C++ c'est toi qui vois mais moi je ne compile qu'en C

  6. #26
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    Moi, je compile le C en C et le C++ en C++, comme toute personne devrait le faire...

  7. #27
    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
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par jerem2000
    ok j'ai trouvé une alternative qui reprenait ton idée,
    j'ai compté la taille necessaire de mon chaine en comptant le nombre de caractères des mes arguments et j'ai fait un char monChar[nbDeCar]
    Tu n'as pas oublié de faire + 1 pour le zéro terminal au moins ?

  8. #28
    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
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    C'est pas logique et c'est un trou dans le système de types du C.
    Pourquoi ?

  9. #29
    Membre éprouvé Avatar de Jérémy Lefevre
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Luxembourg

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 898
    Points : 969
    Points
    969
    Par défaut
    la fonction renvoi du void donc pas de return et on recup un char * ! bizar comme procédé qd meme!

  10. #30
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    void*, pas void tout court...

    void* étant le type de pointeur générique.
    D'ailleurs, en C ou il n'existe qu'un seul opérateur de transtypage, la conversion implicite de void* est un bon moyen d'éviter les risques de perdre de la const-correctness en convertissant un pointeur...

  11. #31
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par jerem2000
    la fonction renvoi du void donc pas de return et on recup un char * ! bizar comme procédé qd meme!
    Rien de bizzard, c'est LE type générique du Langage C, il permet de stocker n'importe quel type de données mais c'est fait implicitement dans ce langage, d'où la possibilité de ne pas faire de cast comme par exemple dans les malloc, une fois que tu aura programmé quelques années avec, ca te semblera moins bizzard

  12. #32
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Franck.H
    Rien de bizzard, c'est LE type générique du Langage C, il permet de stocker n'importe quel type de données mais c'est fait implicitement dans ce langage, d'où la possibilité de ne pas faire de cast comme par exemple dans les malloc, une fois que tu aura programmé quelques années avec, ca te semblera moins bizzard
    La conversion implicite de void* en un autre type de pointeur continue a me sembler bizarre.

  13. #33
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    Pour la raison que j'ai donnée, je pense qu'elle est préférable à la nécessité d'une conversion explicite.
    Ce problème est résolu en C++ par les différents opérateurs de transtypage.

  14. #34
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Trap D
    trou dans le systeme de type
    Pourquoi ?
    C'est une conversion implicite qui n'est pas garantie de donner un resultat sense.

    Il y en a d'autres qui sont problématiques parce qu'elles perdent une partie de l'information présente (genre float->int) mais au moins elles ont toujours un résultat bien défini.

  15. #35
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Médinoc
    Pour la raison que j'ai donnée, je pense qu'elle est préférable à la nécessité d'une conversion explicite.
    C'est quoi la raison que tu as donnée? NULL défini a (void*)0? Le permettre n'offre aucun avantage, ce n'est pas garanti.

    Ce problème est résolu en C++ par les différents opérateurs de transtypage.
    Je ne vois pas le rapport avec la définition de NULL. A moins que tu faisais allusion a autre chose?

  16. #36
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    Ce n'est pas à propos de NULL :
    D'ailleurs, en C ou il n'existe qu'un seul opérateur de transtypage, la conversion implicite de void* est un bon moyen d'éviter les risques de perdre de la const-correctness en convertissant un pointeur...

  17. #37
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Je ne comprends pas ce que tu veux dire.

  18. #38
    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
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    C'est une conversion implicite qui n'est pas garantie de donner un resultat sense.

    Il y en a d'autres qui sont problématiques parce qu'elles perdent une partie de l'information présente (genre float->int) mais au moins elles ont toujours un résultat bien défini.
    Oui, mais il faut partir du principe qu'en C on n'a pas de garde-fou, le programmeur est sensé savoir ce qu'il fait. J'ai l'impression que tu raisonnes avec l'optique C++ où je pense, (je n'y connais rien en C++) qu'on est plus guidé et surveillé.

  19. #39
    Membre éprouvé Avatar de Jérémy Lefevre
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Luxembourg

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 898
    Points : 969
    Points
    969
    Par défaut
    oui en attendant ce procedé on ne le voi qu'en c et qui n'a pas été repri en c++ donc voila il y a surement une raison enfin je suppose

  20. #40
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par jerem2000
    oui en attendant ce procedé on ne le voi qu'en c et qui n'a pas été repri en c++ donc voila il y a surement une raison enfin je suppose
    Il ne faut pas réécrire l'histoire. void* provient du C++, a été repris en C où on a ajouté la conversion implicite vers les autres pointeurs (contre l'avis de D. Ritchie d'ailleurs si je ne me trompe pas).

Discussions similaires

  1. concaténer deux char*
    Par ikuzar dans le forum C++
    Réponses: 6
    Dernier message: 28/03/2011, 19h31
  2. Opérateur de concaténation pour char *
    Par yves042 dans le forum C++
    Réponses: 2
    Dernier message: 06/05/2010, 11h12
  3. Réponses: 5
    Dernier message: 20/03/2009, 19h16
  4. [C++] Concaténer un char[50] avec un int
    Par Invité4 dans le forum C++
    Réponses: 10
    Dernier message: 07/04/2006, 15h54
  5. concaténation de char et float
    Par gup dans le forum C
    Réponses: 11
    Dernier message: 31/12/2005, 01h15

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