Partage
  • Partager sur Facebook
  • Partager sur Twitter

Un espace dans une string

...qui pose problème...

    14 juillet 2007 à 16:13:44

    Bonjour,

    Lorsque je rentre un texte avec un espace dans la string text, le bout de code suivant ne fonctionne pas correctement (surface vaut NULL après cette ligne) :
    surface = TTF_RenderText_Solid(font, text.c_str(), color);

    En enlevant l'espace, le problème disparaît...
    Il y a un traitement particulier à faire avec les espaces dans une string ?
    Merci !
    • Partager sur Facebook
    • Partager sur Twitter
      14 juillet 2007 à 16:19:06

      Un bug de ta fonction TTF_RenderText_Solid ?
      • Partager sur Facebook
      • Partager sur Twitter
      C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
        14 juillet 2007 à 18:30:41

        Bah t'embête pas, mets "_" au lieu d'un espace.
        • Partager sur Facebook
        • Partager sur Twitter
          14 juillet 2007 à 19:04:27

          comment met tu le text dans text
          avec un cin>> ??? ^^

          si c'est avec un cin c'est ca le probleme
          prefere getline(cin,text); à cin>>text;

          si c'est pas ca dit nous comment tu fait pour mettre le texte dans text
          • Partager sur Facebook
          • Partager sur Twitter
            14 juillet 2007 à 19:36:51

            C'est long à décrire, y'a toute une classe derrière... Je doute que ce soit l'affectation qui pose problème étant donné que j'arrive à renvoyer le texte avec son espace dans un message d'erreur...
            Dans le doute, voici le code :

            D'abord le code qui pose problème :
            Main.cpp
            CText
                        play("Play", &georgia25, color, TTF_STYLE_ITALIC),
                        edit("Edit map", &georgia25, color, TTF_STYLE_ITALIC),
                        scores("Best scores", &georgia25, color, TTF_STYLE_ITALIC),
                        exit("Exit", &georgia25, color, TTF_STYLE_ITALIC);

            "Play" passe, alors que "Edit map" ne passe pas :
            Fatal error : unable to render `Edit map`

            Si je change "Edit map" en "Editmap", c'est "Best scores" qui déclenche l'erreur...

            Concernant la classe CText :
            CText.h
            #ifndef CTEXT_H
                #define  CTEXT_H
               
                #include <string>
               
                #include "CFont.h"
                #include "CSurface.h"
                #include "Constants.h"
               

                class CText : public CSurface
                {
                    std::string text;
                    CFont*      font;
                    SDL_Color   color;
                    int         style;
                    WritingMode mode;
                   
                    public:
                   
                    CText() : font(NULL), color(), style() {};
                    CText(std::string, CFont*, SDL_Color, int, WritingMode mode = SOLID);
                    ~CText() { free(); };
                   
                    void setFont(CFont*);
                    void setColor(SDL_Color);
                    void setStyle(int);
                   
                    void write(std::string, WritingMode mode = SOLID);
                };
            #endif
             

            Et un extrait de CText.cpp :
            CText::CText(string newText, CFont* newFont, SDL_Color textColor, int newStyle, WritingMode newMode)
            {
                font  = newFont;
                color = textColor;
                style = newStyle;
                mode  = newMode;
               
                write(newText, mode);
            }

            void CText::write(string newText, WritingMode mode)
            {
                if (font != NULL && newText.c_str() != NULL)
                {
                    if (TTF_GetFontStyle(font->get()) != style)
                    {
                        TTF_SetFontStyle(font->get(), style);
                    }
                   
                    if (mode == SOLID)
                    {
                        surface = TTF_RenderText_Solid(font->get(), newText.c_str(), color);
                    }
                   
                    /*else if (mode == SHADED)
                    {
                        text = TTF_RenderText_Shaded(font, newText.c_str(), textColor, backgroundColor);
                    }*/

                   
                    else
                    {
                        surface = TTF_RenderText_Blended(font->get(), newText.c_str(), color);
                    }
                   
                    if (surface == NULL)
                    {
                        cerr << "Fatal error : unable to render `" << newText << "` : " << TTF_GetError() << endl;
                        bool error;
                        throw error;
                    }
                   
                    text = newText;
                }
               
                else
                {
                    std::cerr << "Fatal error : unable to write : font or text is NULL !" << std::endl;
                    bool error;
                    throw error;
                }
            }

            Comme ça vous savez tout ;) !

            EDIT >> après quelques tests, il semble que que ce soit bien la fonction TTF_RenderText_Solid() qui pose problème... Un bug dans la librairie SDL_ttf ?!
            • Partager sur Facebook
            • Partager sur Twitter

            Un espace dans une string

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown