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 :

string class implementation


Sujet :

C++

  1. #1
    Candidat au Club
    Femme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Février 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement de composants
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2022
    Messages : 3
    Par défaut string class implementation
    Bonjour,

    Je débute dans la programmation C++ et pour m'entrainer un peu, j'ai voulu implementer la class string avec quelques fonctions.
    J'ai quelques soucis avec la classe +.
    Je sais que le problème vient surement du pointeur mais je n'arrive pas à le resoudre.
    Mon constructeur est "imposé" avec un const char*.
    Donc je voulais savoir si j'ai raté un truc et quelle est la meilleure solution pour avoir en sortie un string concatener. (je sais que c'est pas la meilleure solution, pour l'instant je veux juste avoir en retour un string concatener)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        MyString operator +(MyString a){
            int al = a.length();//length() deja implementé 
            int bl = this->length();
            char * charRes = new char [al+bl+1];
            for (int i = 0; i <= bl; i++) {
                  charRes[i] = this->m_string[i];     
                 }
                    for (int i = bl+1; i <= bl+al+1; i++) {
                 charRes[i] = a.m_string[i-(bl+1)];
                            }
         MyString res(charRes);
     
        return res ;
        }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    Billets dans le blog
    4
    Par défaut
    Tu as le droit de dire quel est le problème, parce que "j'ai un problème" ou "ça marche pas", ça n'a jamais donné beaucoup d'infos.
    Ensuite, t'as raté un sacré truc, le chapitre 0 des tableaux qui dit qu'on itère sur [0, length-1] sur un tableau de taille length.
    Parce qu'autant ta première boucle va juste copier le \0, autant la seconde va overflow et le const char* final va être coupé parce qu'il s'arrête probablement sur le premier \0 rencontré.
    Faudrait aussi gérer la mémoire, parce que ça sent la fuite un peu partout.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Candidat au Club
    Femme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Février 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement de composants
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2022
    Messages : 3
    Par défaut
    Merci pour la réponse rapide.
    Alors le problème exacte est que lorsque j'affiche "charRes", j'ai bien mes deux string concatenés. Mais lorsque j'appelle la fonction dans le main, je n'ai que un string qui apparait. Est ce aussi un problème de mémoire ? Car je n'ai pas 'limpression que ça overflow. Je me trompe surement mais bon.

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 751
    Par défaut
    Ton problème est trivial

    En recopiant ta première chaîne de 0 à bl inclus, tout simplement tu recopies le caractère sentinelle '\0'.
    À vérifier, mais tu recopies bl + 1 caractères puis al + 1 : donc il doit y avoir 1 dépassement

    Et ton code, c'est 95% du C ... inutile parce qu'il existe des fonctions comme memset ou strcpy.

  5. #5
    Candidat au Club
    Femme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Février 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement de composants
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2022
    Messages : 3
    Par défaut
    Bonjour,
    Oui vous avez raison, c'est un problème de capacité.
    Pour tout ce qui est strcpy, je voulais justement faire sans mais quand je change le +1, ça marche.
    Je vous remercie pour votre aide !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/04/2007, 08h45
  2. [Reflection] Obtenir toutes les classes implémentant une interface
    Par Pill_S dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 20/04/2005, 16h48
  3. [RMI] Probleme pour retrouver la classe implementée.
    Par Koko22 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 16/09/2004, 19h15
  4. [Reflection] Classes implémentant une interface
    Par thibaut dans le forum API standards et tierces
    Réponses: 17
    Dernier message: 29/07/2004, 14h57
  5. [VB6] Classe Implements
    Par Goldust dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 13/07/2003, 16h41

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