Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cast ... kesako ?

Sujet résolu
    16 février 2006 à 22:38:21

    Salut amis Zér0 ^^

    Je voulais savoir si vous pouviez m'expliquer ce que représente le mot cast en C ..?

    Parcque j'ai vue des posts sur le forum ou vous dites par exemple "il suffit de caster ..." et moi quand je veux compiler mon soft, j'ai des erreur avec pointer from integer without a cast... :(

    Donc j'aimerai comprendre ce que c'est ?


    Mici ! ^^
    • Partager sur Facebook
    • Partager sur Twitter
      16 février 2006 à 22:40:15

      Un cast est un transtypage : Une conversion explicite d'un type à un autre. M'enfin si tu ne sais pas ce que c'est et comment/quand on s'en sert, ne t'en sers pas.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        16 février 2006 à 22:44:26

        Si t'as cette erreur, c'est sans doute que tu as mal passé un argument à une fonction, tu lui passe un entier alors qu'elle veut un pointeur ou l'inverse. Dans ces cas, une conversion explicite permet de résoudre le problème (car on ne peut pas convertir implicitement les pointeurs, trop dangereux, à part le void*), à moins que ce ne soit une erreur de ta part ;)
        • Partager sur Facebook
        • Partager sur Twitter
          16 février 2006 à 23:48:40

          Ben je vous donne un exemple de mon code :D

          C'est un moteur FTP. Donc la le but c'est simplement de se connecter et afficher la liste des fichiers.

          Dans mon code, je fais un getsockname() aprés un blind() et j'ai donc cette ligne la :

          if (getsockname(sockRdv,(struct sockaddr *)&maPrise,sizeof(struct sockaddr_in)) == -1)


          Et il me dis

          attention : passing argument 3 of 'getsockname' makes pointer from integer without a cast


          En sachant que j'ai initialisé mes vaariables comme ceci :

          struct sockaddr_in  maPrise;
          int sockRdv;


          HELP !! Please !! :lol:
          • Partager sur Facebook
          • Partager sur Twitter
            17 février 2006 à 12:53:27

            Citation : http://www.gnu.org/software/libc/manual/html_node/Reading-Address.html#Reading-Address

            getsockname (int socket, struct sockaddr *addr, socklen_t *length-ptr)

            The getsockname function returns information about the address of the socket socket in the locations specified by the addr and length-ptr arguments. Note that the length-ptr is a pointer; you should initialize it to be the allocation size of addr, and on return it contains the actual size of the address data.



            getsockname(sockRdv,(struct sockaddr *)&maPrise,sizeof(struct sockaddr_in))


            Tralala pouet pouet, j'ai trouvé !

            int taille = sizeof(struct sockaddr_in);
            if (getsockname(sockRdv,(struct sockaddr *)&maPrise, &taille) == -1)


            Le message d'erreur indiquait le problème (on a mis un entier au lieu d'un pointeur) et l'endroit (argument 3). C'est bizarre que t'ai pas deviné tout seul quand même...
            • Partager sur Facebook
            • Partager sur Twitter
              17 février 2006 à 14:49:06

              Citation : bluestorm

              Le message d'erreur indiquait le problème (on a mis un entier au lieu d'un pointeur) et l'endroit (argument 3). C'est bizarre que t'ai pas deviné tout seul quand même...



              Désolé ... :( Je suis que débutant en C... Ca ne fais que 1mois ou 2 que je m'interesse C. Et avant je bossais qu'en VB :euh: et comme je vient de passé 100% linux ben je me met au C ^^

              En tous cas, l'erreur vennait de moi ! Car d'origine le code était comme ca, et je m'était dis, pourquoi rajouter une ligne de code ??
              Mais je compend mieux pourquoi il y a cette ligne en plus :D

              Parcontre maintenant je retrouve l'erreur que j'avais avant :

              attention : pointer targets in passing argument 3 of 'getsockname' differ in signedness


              Et mon code :

              int lgNom;

              lgNom = sizeof(struct sockaddr_in);
                              if (getsockname(sockRdv,(struct sockaddr *)&maPrise,&lgNom) == -1)
                              {
                                  perror("Echec lors du getsockname()");
                                  return 1;
                              }


              J'avais cherché la traduction du mot signedness mais j'ai pas trouvé. Donc ma première question :

              Que veut dire en francais signedness ?

              Et Qu'est ce que veux dire cette erreur ?

              Et comment la résoudre ?


              Merci en tous cas a vous tous !!! Vous aidez énormément !! ^^
              • Partager sur Facebook
              • Partager sur Twitter
                17 février 2006 à 14:56:30

                signedness veut probablement dire quelque chose comme "le signement" (pas de mot en français) (c'est le nom anglais dérivé de l'adjectif "signed" je pense)
                Je viens de regarder et reverso nous traduit ça comme "le fait d'être signé". :)

                T'as du mettre un signed/unsigned quelque part et ça doit pas coller avec le reste^^.
                • Partager sur Facebook
                • Partager sur Twitter
                  17 février 2006 à 15:11:33

                  Au lieu de déclarer
                  int lgNom;

                  déclare plutôt :
                  socklen_t lgNom;


                  Sinon, "attention" c'est pas une erreur, c'est un warning il me semble. Ca veut dire que le programme a quand même réussi à compiler.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 février 2006 à 15:48:36

                    Citation : bluestorm

                    Au lieu de déclarer

                    int lgNom;


                    déclare plutôt :

                    socklen_t lgNom;



                    Sinon, "attention" c'est pas une erreur, c'est un warning il me semble. Ca veut dire que le programme a quand même réussi à compiler.



                    Ok ! Ca marche !! Merci !!! ;)

                    Je sais que le soft peut quand même marcher, mais d'une, j'aime quand c'est nikel un code :D et de plus il me faisait une erreur à l'execution justement au getsockname !

                    Merci beaucoup !

                    Comme j'ai deux autres erreurs du même type, je vais essayer de me débrouiller. ^^


                    Edit : Bon j'ai corrigé la deuxième erreur .. mais la première c'est un truc que je connais pas...

                    Voila, donc quand mon moteur FTP passe en mode actif, aprés le getsockname, il va afficher l'adresse IP du serveur FTP ( la c'est on propre Pc donc 127.0.0.1 ).
                    Ca marche trés bien pour la ligne :
                    printf("Adresse IP %s \n",inet_ntoa(maPrise.sin_addr));


                    Adresse IP 127.0.0.1


                    Un peu plus loin, j'ai un StrCat qui doit placer ce 127.0.0.1 dans une variable ip

                    char ip[256];
                    strcat(ip,inet_ntoa(maPrise.sin_addr));


                    Mais à la compilation il me dis :
                    attention : passing argument 2 of 'strcat' makes pointer from integer without a cast

                    Quand je fais un
                    printf("%s", inet_ntoa(maPrise.sin_addr));


                    Il me répond bien
                    127.0.0.1


                    Quand je créé une variable char[100] pour y mettre inet_ntoa(maPrise.sin_addr), il me dis que c'est pas possible ...

                    Et aprés, mon code se bloque sur le accept() :


                    printf("OK 1\n");
                    lgNom = sizeof (&saPrise);
                    printf("OK 2\n");
                    sockCom = accept(sockRdv,(struct sockaddr *)&saPrise,&lgNom);
                    printf("OK 3\n");



                    OK 1
                    OK 2



                    Help !! :lol::lol:
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Cast ... kesako ?

                    × 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