Partage
  • Partager sur Facebook
  • Partager sur Twitter

Les pointeurs

et chaine de caractere...

    16 juin 2006 à 11:48:29

    Bonjour,
    Je rencontre quelque difficultées avec les pointeurs et les chaines de caracteres...
    Autant etre franc j'y comprend rien^^
    Je rencontre deux principaux problemes:

    dans un premier temps je souhaitait créer une fonction renvoyant une chaine de caractere:
    typedef char chaine15[15];

    '** proto**'
    chaine15 retournechaine();

    '** appel dans le prog principal **'
    strcpy(machaine, retounrchaine());

    '** la fonction ***'
    chaine15 retournechaine()
    {
    return "dede";
    }
    Ce qui ne fonctionne pas, apparament le probeleme vient du fait qu'il considere chaine15 comme un tableau (logique :p) mais qu'il ne veut pas le retourner....

    Apres ca fait plusieur jours que j'essaye de passer une chaine de caractere en donnée modifiée dans une procedure, j'ai beau cherché sur le net et jouer avec les * et les & ca plante encore :(
    • Partager sur Facebook
    • Partager sur Twitter
      16 juin 2006 à 11:52:32

      Bonjour!
      Est ce que tu peut donner tout ton code et surtout en utilisant les balises de codes.
      Parce que la c'est vraiment compliqué a comprendre :p
      • Partager sur Facebook
      • Partager sur Twitter
        16 juin 2006 à 11:52:49

        Il est impossible de retourner un tableau avec une fonction. Deux possibilités s'offrent à toi :
        - passer le tableau alloué en parametre (c'est un passage par adresse) et modifier son contenu dans la fonction.
        - allouer le tableau dans la fonction et retourner l'adresse de son premier élément.

        1ère possibilité

        void fonction(char tab[],int taille){
                strcpy(tab,"dédé");
        }

        main(){
                char chaine[5];
                fonction(chaine, 5);
                printf("%s\n",chaine);
        }



        2nd possibilité


        char* fonction(){
                char *chaine=NULL;
                chaine=malloc(5*sizeof(char));
                strcpy(chaine,"dédé");
                return chaine;
        }

        main(){
                char *chaine = NULL;
                chaine = fonction();
                printf("%s\n",chaine);
        }


        Attention il se peut qu'une erreur se soit glissé dans mon code j'ai pas le temps de le tester.
        • Partager sur Facebook
        • Partager sur Twitter
          16 juin 2006 à 12:13:24

          Merci beaucoup!
          La deuxieme possibilité correspond bien a ce que je cherche, mais ca ne marche toujours pas ( je suis pas tres doué :/)
          Pourrait tu aussi me donner le prototype de la fonction s'il te plait?

          Et désolé pour la presentation du code c'est mon deuxieme post je n'ai pas fait attention :)
          Le programme quand a lui fait plus de 1000 lignes ...
          • Partager sur Facebook
          • Partager sur Twitter
            16 juin 2006 à 13:34:16


            /* Prototype */
            char* fonction(void);
            • Partager sur Facebook
            • Partager sur Twitter
              16 juin 2006 à 15:52:45

              bon je dois vraiment etre null mais j'y arrive toujours pas :(
              Aucune erreur ni warning dans la compilation, mais erreur windows a l'execution...



              /*** le prototype ***/
              chaine15* verif_date();

              /*** le prog principal ***/
              int main()
              {
                  chaine15 *chaine ;
                  chaine = verif_date();
                  printf("%s\n", &chaine);
              }
              /*** La procedure ***/
              chaine15* verif_date()
              {
                        chaine15 *chaine=NULL;
                        strcpy(*chaine, "dédé");
                        printf("%s", *chaine);
                        getch();
                        return chaine;
              }

              L'erreur provient apparament du strcpy de la fonction...
              Merci encore de m aider car la je coule :)
              • Partager sur Facebook
              • Partager sur Twitter
                16 juin 2006 à 16:06:41

                Bon je viens de relire ton truc... en fait je crois que tu devrais relire le cours de mateo :p parceque tu fais un peu nimporte quoi avec les pointeurs ! (tes deux printf sont différent déjà la y'a un probleme quelque part...)

                Ceci dit je peux répondre à des questions, si tant est qu'elle soient un peu précises.


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

                /* typedef <type_existant> <mon_type_perso> */
                typedef char caractere;

                /* Le prototype */
                caractere* verif_date();

                /* Le prog principal */
                int main()
                {
                    caractere *chaine ;
                    chaine = verif_date();
                    /* On affiche la chaine, chaine est déja un pointeur il ne faut pas mettre & */
                    printf("%s\n", chaine);
                    return 0;
                }

                /* La fonction */
                caractere* verif_date()
                {
                    caractere *chaine=NULL;
                    /* On alloue un tableau de 15 caracteres */
                    chaine = malloc(15*sizeof(caractere));
                    /* Ne pas oublier la lib string.h */
                    strcpy(chaine, "deydey");
                    printf("%s", chaine);
                    getchar();
                    /* On retourne le pointeur pointant sur le 1er élement de la chaine de caractère */
                    return chaine;
                }




                deydey
                deydey

                Press ENTER to continue.


                EDIT : Je précise quand meme apres la remarque de -ed- qu'en effet ce typedef est autorisé, mais a mon avis c'est une mauvaise idée de laisser l'auteur utiliser ce genre de typedef qui dans son cas reflète je pense une erreur de compréhension.
                • Partager sur Facebook
                • Partager sur Twitter
                  16 juin 2006 à 20:37:18

                  Citation : nescence

                  dans un premier temps je souhaitait créer une fonction renvoyant une chaine de caractere:


                  La réponse est simple. C'est pas possible.

                  Tout ce qu'on sait faire, c'est retourner l'adresse du premier élément d'un tableau. Or il se trouve qu'une chaine de caractères est précisément un tableau de char initialisé avec une séquences de valeurs représentant des caractères et terminée par un 0. Por retourner l'adresse, il suffit donc que le type retour soit 'adresse de char', c'est à dire 'char *' :
                  char *f();

                  Je te laisse écrire le code. Poste le si il ne fonctionne pas.
                  Rappel
                  L'adresse du premier élément d'un tableau est &tab[0], soit (tab + 0), soit (tab), soit finalement et tout simplement tab.
                  Piège
                  L'adresse retournée doit être valide après exécution de la fonction.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Music only !
                    16 juin 2006 à 22:34:25

                    nescence,
                    si tu n'a pas encore résolu ton pb. cela vient peut-être de ta définition :
                    La ligne suivante ne me semble pas correcte:

                    Citation : nescence

                    typedef char chaine15[15];


                    La syntaxe est la suivante :
                    typedef <type_existant> <mon_type_perso>
                    comme l'a précise lexou
                    Bonne suite à tous
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 juin 2006 à 22:42:46

                      Citation : Planeur

                      La ligne suivante ne me semble pas correcte:

                      Citation : nescence

                      typedef char chaine15[15];



                      Elle est correcte pour un type tableau... Ce typedef n'a pas prouvé son efficacité et il n'est pas utilisé.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Music only !
                        16 juin 2006 à 22:53:35

                        Merci Emmanuel pour cette précision...
                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 juin 2006 à 22:59:27

                          Rebonsoir, Merci a tous pour votre aide,
                          J' ai essayer de lire le cour sur les pointeurs et compris lorsque s'il s 'agit de type integer néanmois pour les tableaux et les char je nage un peu ,beaucoup ;)
                          J'essaye de suite ce que vous m'avez expliqué
                          Merci :)
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Les pointeurs

                          × 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