Partage
  • Partager sur Facebook
  • Partager sur Twitter

Je trouve pas mon erreur

chaines de caracteres

Sujet résolu
    18 juin 2006 à 23:44:18

    Bonjour a tous alors voila j'ai essayé de faire la fonction strchr mais voila a la compilation y'a un message d'erreur qui s'affiche : error: invalid conversion from `const char*' to `char*'.

    Voici ma fonction :


        char* chainechr(const char chaine[], char caractere)
                   {
                        long i = 0;
                        char  *chaineCherche = NULL ;

                        while(i != strlen(chaine) + 1 || caractere == chaine[i])
                        {
                                       i++;
                        }

                        if (caractere == chaine[i])
                        {

                           chaineCherche= &chaine[i];
                            return  chaineCherche;
                        }

                        else
                        {
                                   return NULL;
                        }
                   }

    Merci de vos reponses ^^ .
    • Partager sur Facebook
    • Partager sur Twitter
      19 juin 2006 à 0:06:39

      Citation : DeusMars

      Bonjour a tous alors voila j'ai essayé de faire la fonction strchr mais voila a la compilation y'a un message d'erreur qui s'affiche : error: invalid conversion from `const char*' to `char*'.


      Cette erreur est due à une erreur de conception de la fonction strchr() qui devrait retourner char const *. C'est pas grave et j'ai fait la petite modif qui va bien mais la fonction ne passe pas mon test :

      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>

      #define N(a) (sizeof(a)/sizeof*(a))

      char* chainechr(const char chaine[], int caractere)
      {
         long i = 0;
         char *chaineCherche = NULL ;

         while (i != strlen(chaine) + 1 || caractere == chaine[i])
         {
            i++;
         }

         if (caractere == chaine[i])
         {

            chaineCherche = (char*) &chaine[i];
            return chaineCherche;
         }

         else
         {
            return NULL;
         }
      }

      /* ---------------------------------------------------------------------
         tu ()
         ---------------------------------------------------------------------
         test unitaire
         ---------------------------------------------------------------------
         I:
         O:
         --------------------------------------------------------------------- */

      static int tu (void)
      {
         int ret = EXIT_SUCCESS;

         struct test
         {
            unsigned long nb;
            struct in
            {
               char const *haystack;
               int needle;
            }
            in;
            struct out
            {
               int found;
            }
            out;
         };

         static struct test a[] =
            {
               {
                  10, "", 0, 1},
               {
                  11, "", 'a', 0},
               {
                  12, "a", 'a', 1},
               {
                  13, "a", 'b', 0},
               {
                  14, "ab", 'a', 1},
               {
                  15, "ab", 'b', 1},
               {
                  16, "abb", 'b', 1},
            };

         int err = 0;
         size_t i;

         for (i = 0; i < N(a) && !err; i++)
         {
            struct test const *p = a + i;
            char *s_out;

      #if 1
            /* D.U.T */
            s_out = chainechr (p->in.haystack, p->in.needle);
      #else
            /* reference */
            s_out = strchr (p->in.haystack, p->in.needle);
      #endif

            if (s_out != 0)
            {
               if (p->out.found == 0)
               {
                  printf ("ERROR at test %lu\n", p->nb);
                  err = 1;
               }
               else
               {
                  if (*s_out != p->in.needle)
                  {
                     printf ("ERROR at test %lu\n", p->nb);
                     err = 1;
                  }
               }

            }
            else
            {
               if (p->out.found == 1)
               {
                  printf ("ERROR at test %lu\n", p->nb);
                  err = 1;
               }
            }
         }

         if (!err)
         {
            puts ("\nP A S S E D\n");
         }

         return ret;
      }

      int main()
      {
         tu();
         return 0;
      }


      ERROR at test 10

      Press ENTER to continue.
      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        19 juin 2006 à 0:20:28

        Oui merci maintenant je n'ai plus de messages d'erreur ;) .Cependant ma fonction ne marche toujours pas je dois avoir fait une erreur ce qui expliquerai le resultat de ton test ^^ .
        Je crois que je vais cogiter un bon bout de temps sur ce code.
        • Partager sur Facebook
        • Partager sur Twitter
          19 juin 2006 à 0:28:25

          Citation : DeusMars

          Oui merci maintenant je n'ai plus de messages d'erreur ;) .Cependant ma fonction ne marche toujours pas je dois avoir fait une erreur ce qui expliquerai le resultat de ton test ^^ .
          Je crois que je vais cogiter un bon bout de temps sur ce code.


          Je déconseille strlen(), surtout dans une boucle. Pour tester la finc d'une chaine, il suffit de constaté que le caractère vaut 0... Ca devrait grandement simplifié cette fonciton qui tient en 3/4 lignes...

          • Partager sur Facebook
          • Partager sur Twitter
          Music only !
            19 juin 2006 à 0:49:48

            Je pense avoir trouvé une erreur :-° .Je crois que j'ai oublié le "!" dans mon while...
            Enfin je crois que c'est ca je commence a fatiguer :p . Enfin quand je teste mon code en tout cas ca marche toujours pas :( .
            • Partager sur Facebook
            • Partager sur Twitter
              19 juin 2006 à 8:48:05

              Salut !

              Voila ta fonction corrigée :
              char* chainechr(const char chaine[], char caractere)
                             {
                                  long i = 0;
                                  char  *chaineCherche = NULL ;

                                  while( chaine[i]!='\0' && caractere != chaine[i] )
                                  {
                                                 i++;
                                  }

                                  if (caractere == chaine[i])
                                  {
                                     chaineCherche= (char*) &chaine[i];
                                      return  chaineCherche;
                                  }

                                  else
                                  {
                                             return NULL;
                                  }
                              }

              Tu avais juste fait une petite erreur d'innatention ;)
              ++ !NiCo!
              • Partager sur Facebook
              • Partager sur Twitter
                19 juin 2006 à 13:24:37

                Oui je me sens ridicul maintenant :honte: .Maintenant plus de soucis tout marche comme sur des roulettes :D .Merci beaucoup à -ed- et à !NiCo! ;) .
                • Partager sur Facebook
                • Partager sur Twitter

                Je trouve pas mon erreur

                × 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