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 u_char et chaines


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut Concaténation u_char et chaines
    Bonjour

    Dans un projet qu'on m'a donné, on emploie des u_char et j'aurais besoin de faire une chaîne contenant ces u_char.

    Voilà les variables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct ip_address{
    	u_char byte1;
    	u_char byte2;
    	u_char byte3;
    	u_char byte4;
    }ip_address;
    Et voilà ce que j'aimerais pouvoir faire avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Data" + ih->saddr.byte3 + ".txt";
    Mais, ainsi, ca me met une erreur comme quoi on ne peut additionner 2 pointeurs, ce qui est logique.

    Comment est-ce que je peut faire ?


  2. #2
    Membre confirmé Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Par défaut
    avec la commande sprintf, tu devrais pouvoir faire ce que tu veux, mais le resultat sera une chaine de caracteres... Si tu veux une chaine de plusieurs types, meme de taille identique, va falloir bidouiller une classe mere, des classe fille et faire une chaine de type classe mere je pense

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Y a tout ce qu'il faut dans la FAQ C++, chapitre "chaînes de caractères".

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Par défaut
    C'est du C ou du C++ ?
    Pour cu C++, les conversion avec
    std::ostringstream devraient suffir.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    std::ostringstream toto;
        toto << "Data";
        toto << ih->saddr.byte3;
        toto << ".txt";

  5. #5
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par harsh
    avec la commande sprintf, tu devrais pouvoir faire ce que tu veux, mais le resultat sera une chaine de caracteres... Si tu veux une chaine de plusieurs types, meme de taille identique, va falloir bidouiller une classe mere, des classe fille et faire une chaine de type classe mere je pense
    Ca a l'air de marche, sauf que j'ai un autre problème maintenant

    Mon code donne ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char* path = "";
    sprintf(path,"Data",ih->saddr.byte3,"_",ih->saddr.byte4,"-",ih->daddr.byte3,"_",ih->daddr.byte4,".txt");
    Et il me fait des grosses erreurs pas jolies :

    First-chance exception at 0x00418f57 in capture_comm.exe: 0xC0000005: Access violation writing location 0x0042d8cb.
    Unhandled exception at 0x00418f57 in capture_comm.exe: 0xC0000005: Access violation writing location 0x0042d8cb.

  6. #6
    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
    N'as-tu jamais appris à utiliser sprintf ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char buf[128];//Une taille qui doit être assez grande.
    sprintf(buf, Data%u_%u_%u_%u.txt", ih->saddr.byte1, ih->saddr.byte2, ih->saddr.byte3, ih->saddr.byte4);
    PS: sprintf() a l'inconvénient de ne pas comporter de limite de taille. Lui préférer snprintf() (standard C99) sur les architectures qui la supportent.

    Et voici un équivalent Windows à snprintf() standard:
    http://www.developpez.net/forums/sho...8&postcount=14
    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.

  7. #7
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par Médinoc
    N'as-tu jamais appris à utiliser sprintf ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char buf[128];//Une taille qui doit être assez grande.
    sprintf(buf, Data%u_%u_%u_%u.txt", ih->saddr.byte1, ih->saddr.byte2,
     ih->saddr.byte3, ih->saddr.byte4);
    à tous ! Ca marche bien

    J'ai jamais appris à utiliser le C++ tout court

    Tout ce que je sais du C++, ca a été ce que j'ai lu dans un cours, mais j'ai pas persevéré là dedans (les pointeurs...)

  8. #8
    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
    Pour info: sprintf() n'est pas du C++, c'est du C.
    En C++, on utilise les streams (voir post de Luther13, rajouter des cast des u_char en int si ça ne passe pas comme tu voudrais)
    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.

  9. #9
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Citation Envoyé par wichtounet
    J'ai jamais appris à utiliser le C++ tout court

    Tout ce que je sais du C++, ca a été ce que j'ai lu dans un cours, mais j'ai pas persevéré là dedans (les pointeurs...)
    Mauvais cours. Changer de cours.
    D'autant que les pointeurs sont bien plus nécessaires en C qu'en C++. Ton plantage avec l'utilisation de sprintf était justement dûe à une mauvaise utilisation de la mémoire. Chose que l'on apprend à manipuler avec ... les pointeurs.

    (En C++, tu peux te passer de savoir ce qu'est un pointeur jusqu'au chapitre sur l'héritage et le polymorphisme)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  10. #10
    Membre confirmé Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Par défaut
    Euh, bah c'est normale puisque path n'est pas assez grand pour contenir toute ta chaine. A l'initialisation tu lui donnes une taille de 1 octet

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/03/2008, 14h24
  2. problème de concaténation de deux chaines
    Par info79 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2008, 17h04
  3. Concaténation d'une chaine avec un champ
    Par arjo54 dans le forum Access
    Réponses: 0
    Dernier message: 27/07/2007, 13h34
  4. PB Concaténation de 2 chaines de caracteres
    Par size_one_1 dans le forum Windows Forms
    Réponses: 9
    Dernier message: 19/05/2007, 22h54
  5. pb concaténation d'une chaine avec un caractère
    Par P'tite Nélodie dans le forum C
    Réponses: 9
    Dernier message: 06/11/2006, 19h09

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