Partage
  • Partager sur Facebook
  • Partager sur Twitter

Un printf ... puis errno = 84

Sous linux en C

Sujet résolu
    28 octobre 2006 à 11:02:58

    Salut à tous !

    Voilà, dans mon petit client ftp, si la connections fonctionne je veux juste afficher Connecté à et l'adresse ip.
    Donc, j'ai fais :


    if ( errno == 0 )
    {                     
            if ( AFFICHER_MESSAGES == 1 )
            {
                    printf("[i]Connecté à %s\n", rstrAdrIP );
            }
    }


    Donc errno est bien égale à 0 dans entre dans la fonction, mais aprés avoir fais le printf, errno = 84... Je ne pige pas pourquoi...

    rstrAdrIP est déclaré comme ca : char rstrAdrIP[] dans ma fonctionne :
    int FTPConnexion ( char rstrAdrIP[], int rintPrt, char rstrLog[], char rstrPas[] );

    Une petite help
    • Partager sur Facebook
    • Partager sur Twitter
      29 octobre 2006 à 0:36:38

      Petite aide s'il vous plait ^^
      • Partager sur Facebook
      • Partager sur Twitter
        29 octobre 2006 à 0:53:39

        si errno != 0 çà veux probablement dire qu'il s'est produit une erreur
        • Partager sur Facebook
        • Partager sur Twitter
          29 octobre 2006 à 1:32:57

          Merci minirop, c'est pourquoi je poste ... ^^
          • Partager sur Facebook
          • Partager sur Twitter
            29 octobre 2006 à 1:52:59

            oui mais si on n'as pas plus de code on risque pas de deviner
            • Partager sur Facebook
            • Partager sur Twitter
              29 octobre 2006 à 8:52:40

              84 ça a une signification hein ;)
              perror("Erreur");

              Pour voir à quoi ça correspond :)
              • Partager sur Facebook
              • Partager sur Twitter
                31 octobre 2006 à 22:14:30

                @minirop : Ben je vous ai donner la partie de code qui déconne.. Justement, si je met en commentaires la ligne du printf, ben errno = 0. Donc je poste savoir si dans la ligne avec le printf il y a une erreur ou quoi.

                @qsmanur : Yes, je l'ai déjà vue... mais ce m'avance pas trop .. :(

                84 EOVERFLOW Value too large to be stored in data type. A numerical result of the function was too large to be stored in the caller-provided space.
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  1 novembre 2006 à 0:06:42

                  Ben, ce message d'erreur signifie qu'a un moment, tu essaie de mettre une valeur trop grande dans une variable.

                  En d'autres termes, tu veut mettre une valeur dans une variable, mais cette valeur prend plus de mémoire que la taille de cette variable n'est prévue pour en contenir.
                  Résultat : la valeur "déborde" (overflow) de la variable. Et ça, le système, il aime pas du tout : il ferme donc brutalement le programme.

                  (Ceci peut se produire si tu essaies de copier une chaîne dans une autre, et que la chaîne de destination n'est pas assez grande, par exemple).

                  Essaies de debugger ton programme (touche F8 sous code::blocks), gdb devrait te montrer la ligne ou ça foire. Sinon, montre nous plus de code.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    1 novembre 2006 à 0:13:35

                    Juste pour savoir, tu l'as bien initialisée avant ton tableau ? (enfin au moin inscrit un truc quoi).
                    • Partager sur Facebook
                    • Partager sur Twitter
                      1 novembre 2006 à 2:27:13

                      Ha oui ok ! Ca serai rstrAdrIp qui cause problème.

                      Cette variable est en paramètre dans la fonction :
                      int FTPConnexion ( char rstrAdrIP[], int rintPrt, char rstrLog[], char rstrPas[] );


                      Je vient de tester en dimensionnant mon char à 16 ou à 20, toujours pareil...

                      Effectivement, quand je retire rstrAdrIp, errno=0.

                      Bisard... A aucun moment dans le code je ne touche cette variable...
                      • Partager sur Facebook
                      • Partager sur Twitter
                        3 novembre 2006 à 0:43:26

                        Alors les gas ? Une idée de mon erreur ? :-°
                        • Partager sur Facebook
                        • Partager sur Twitter
                          3 novembre 2006 à 15:29:32

                          Lors de l'appel de fonction, la chaine que tu envoies est assez grande ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            3 novembre 2006 à 22:27:29

                            Bon je pense que le plus simple est que je vous donne tout le code de la fonction et la manière dont je l'appele.
                            Désolé pour le poste un peu grand :D

                            int FTPConnexion ( char rstrAdrIP[], int rintPrt, char rstrLog[], char rstrPas[] )
                            {
                                   
                                    /******* DéCLARATiONS DE VARiABLES *******/
                                    struct hostent  * adrIp;
                                   
                                    fd_set fSTO;                    // Lecture de la socket pour le TimeOut
                                           
                                    char    *  lstrFtpLog="";
                                    char    *  lstrFtpPas="";
                                    char       lstrFtpCmd[256];
                                   
                                    int     lintSckPrincipal=0;
                                    int     lintResCon=2;
                                    int     lintCdeFTP=0;
                                   
                                    printf("----------------------------------------------\n"
                                                     "Librairie FTP pour linux\nVERSION: %d.%d.%d\nAUTEUR : zedtux\nADRESSE: zedtux@yahoo.fr\n\n", VERSION_MAJEUR, VERSION_MINEUR, REVISION);
                                   
                                    /***
                                     ***  VERiFiCATiONS DiVERS AVANT DE COMMENCER
                                     ***/

                                   
                                    // Vérifie si une ip est bien donné
                                    if ( IsEmpty(rstrAdrIP) <= 0 )
                                    {
                                            if ( AFFICHER_MESSAGES == 1 )
                                            {
                                                    printf("ERREUR : adresseIP est vide !\n");
                                            }
                                   
                                    } else {
                                   
                                            // Vérifie si le port est donné ou pas
                                            if ( rintPrt == 0 )
                                            {
                                                    // Change le port
                                                    rintPrt = PORT_PAR_DEFAUT;
                                                    if ( AFFICHER_MESSAGES == 1 )
                                                    {
                                                            printf("INFO   : Utilisation du port par defaut : %d\n", rintPrt);
                                                    }
                                            }
                                           
                                            // Met en mémoire le login
                                            lstrFtpLog = (char *)malloc(strlen(rstrLog)*sizeof(char)+1);
                                            strncpy(lstrFtpLog, rstrLog, strlen(rstrLog));
                                           
                                            // Met en mémoire le mot de passe rstrPas
                                            lstrFtpPas = (char *)malloc(strlen(rstrPas)*sizeof(char)+1);
                                            strncpy(lstrFtpPas, rstrPas, strlen(rstrPas));
                                           
                                            // Vérifie si un login est bien donné
                                            if ( IsEmpty(lstrFtpLog) == 0 )
                                            {
                                                    strncpy(lstrFtpLog, "anonymous", 9);
                                                   
                                                    if ( AFFICHER_MESSAGES == 1 )
                                                            printf("INFO   : login est vide. Maintenant login=%s\n", lstrFtpLog);
                                   
                                                   
                                                    // Vérifie si un mot de passe est bien donné
                                                    if ( IsEmpty(lstrFtpPas) == 0 )
                                                    {
                                                            strncpy(lstrFtpPas, "anonymous", 9);
                                                           
                                                            if ( AFFICHER_MESSAGES == 1 )
                                                                    printf("INFO   : mot de passe vide. Maintenant mot de passe=%s\n", lstrFtpPas);
                                           
                                                    }
                                                   
                                            }
                                   
                                            /***
                                             ***  FiN DES VERiFiCATiONS DiVERS
                                             ***/

                                           
                                            printf("----------------------------------------------\n\n");
                                           
                                            /***
                                             ***  DEBUT CRéATiON DE LA SOCKET ET CONNEXiON
                                             ***/

                                           
                                            /* Cherche l'adresse ip du serveur */
                                            adrIp = gethostbyname(rstrAdrIP);
                                            if ( adrIp == NULL )
                                            {
                                                    perror("Echec lors du gethostbyname()");
                                            }
                                           
                                            /* Remplissage de la structure connexionPrincipal */
                                            connexionPrincipal.sin_family = AF_INET;
                                            connexionPrincipal.sin_port = htons(rintPrt);   
                                            bcopy(adrIp -> h_addr, &(connexionPrincipal.sin_addr), adrIp -> h_length);
                                           
                                            // Creation de la socket principal
                                            Erreur( lintSckPrincipal = socket(AF_INET, SOCK_STREAM, PROTOCOLE), "socket()");
                                           
                                            // Connexion du socket au serveur
                                            Erreur( connect (lintSckPrincipal,(struct sockaddr *)&connexionPrincipal,sizeof(connexionPrincipal)), "Connect()");
                                           
                                            /***
                                             ***  FiN CRéATiON DE LA SOCKET ET CONNEXiON
                                             ***/

                                           
                                            /*                                                            */
                                            /*  GESTiON DU TiMEOUT  */
                                            /*                                                            */
                                                    // Efface fSTO
                                                    FD_ZERO(&fSTO);
                                                    // Place lintfdSck dans fSTO
                                                    FD_SET(lintSckPrincipal, &fSTO);
                                           
                                                    /* DéFiNiE LE TiMEOUT [TEMPS_LIMITE] EN SECONDES */
                                                    tempLimit.tv_sec = TEMPS_LIMITE;
                                                    tempLimit.tv_usec = 0;
                                                   
                                                    /* ACTiVE LE TiMEOUT PENDANT TEMPS_LIMITE SECONDES  */
                                                    if( select(FD_SETSIZE, &fSTO, NULL, NULL, &tempLimit) )
                                                    {
                                                           
                                                            // Connection refused
                                                            if ( errno == ECONNREFUSED )
                                                            {
                                                                    lintResCon=0;
                                                                   
                                                                    if ( AFFICHER_MESSAGES == 1 )
                                                                            printf("[E]Connexion à %s Refusé\n", rstrAdrIP );
                                                           
                                                            // No route to host
                                                            }else if ( errno == EHOSTUNREACH )
                                                            {
                                                                    lintResCon=0;
                                                                   
                                                                    if ( AFFICHER_MESSAGES == 1 )
                                                                            printf("[E]Connexion à %s Impossible : Aucun itinéraire\n", rstrAdrIP );
                                                                   
                                                            // Connecté
                                                            }else if ( errno == 0 )
                                                            {
                                                                    lintResCon=1;
                                                                   
                                                                    if ( AFFICHER_MESSAGES == 1 )
                                                                    {
                                                                            printf("[i]Connecté à %s\n", rstrAdrIP);
                                                                    }
                                                           
                                                            // Sinon
                                                            } else {
                                                                   
                                                                    lintResCon=0;
                                                                   
                                                                    if ( AFFICHER_MESSAGES == 1 )
                                                                            printf("[E]Erreur à la connexion vers %s [errno:%d]\n", rstrAdrIP, errno );
                                                                   
                                                            }
                                                                   
                                                    }
                                           
                                            /*                                      */
                                            /* FiN GESTiONS DU TiMEOUT */
                                            /*                                      */
                                           
                                            printf("[i]ERRNO : %d\n", errno);
                                           
                                            // Si connexion est réussite
                                            if( lintResCon == 1 )
                                            {
                                                   
                                                    /****
                                                     ****  DEBUT DU TRAiTEMENT FTP !
                                                     ****/

                                                   
                                                    // Enregistre la commande en cours
                                                    gintFtpCmd = CONNEXION;
                                                   
                                                    // 220 = Message de bienvenue.
                                                    if (FTPDialogue(lintSckPrincipal) == 220)
                                                    {
                                                            // Enregistre l'action en cours
                                                            gintFtpCmd = CMD_USER;
                                                            // Reconstitue la command à executer
                                                            sprintf(lstrFtpCmd, "USER %s\r", lstrFtpLog);
                                                            // Envoie la commande à la socket principal
                                                            FTPEnvoieCommand(lintSckPrincipal, lstrFtpCmd);
                                                           
                                                            // Lecture de la réponse du serveur
                                                            // Si le serveur as répondu par un 331 => Demande du mot de passe
                                                            if ( FTPDialogue(lintSckPrincipal) == 331)
                                                            {
                                                                    // Enregistre l'action en cours
                                                                    gintFtpCmd = CMD_PASS;
                                                                    // Reconstitue la command à executer
                                                                    sprintf(lstrFtpCmd, "PASS %s\r", lstrFtpPas);
                                                                    // Envoie la commande à la socket principal
                                                                    FTPEnvoieCommand(lintSckPrincipal, lstrFtpCmd);
                                                                   
                                                                    // Lecture de la réponse du serveur
                                                                    lintCdeFTP = FTPDialogue(lintSckPrincipal);
                                                                    // Si le serveur as répondu par un 230 => Loggé sur le FTP
                                                                    if ( lintCdeFTP == 230)
                                                                    {
                                                                            // Connexion au FTP terminé.
                                                                    // Si le serveur as répondu par un 530 => Compte non valide
                                                                    } else if (lintCdeFTP == 530 )
                                                                    {
                                                                            printf("[E]Erreur : Login ou mot de passe invalide.\n");
                                                                            close(lintSckPrincipal);
                                                                            lintSckPrincipal=-1;
                                                                    }
                                                                   
                                                            } else if( lintCdeFTP == 530 )
                                                            {
                                                                    printf("[E]Erreur : Le compte %s n'existe apparement pas sur ce serveur.\n", lstrFtpLog);
                                                                    close(lintSckPrincipal);
                                                                    lintSckPrincipal=-1;
                                                            }
                                                    } else {
                                                            lintSckPrincipal = -1;
                                                    }
                                            }
                                    } // FiN DU iF QUi CHECK L'iP
                                   
                                    free(lstrFtpLog);
                                    free(lstrFtpPas);
                                   
                                    return lintSckPrincipal;

                            }



                            Et donc je l'appele de la manière suivante :

                            fdSock=FTPConnexion("adresse_serveur", 0, "login", "motdepasse");
                            • Partager sur Facebook
                            • Partager sur Twitter
                              4 novembre 2006 à 21:57:19

                              /!\ Code ingideste. C'est quoi cette fonction monstrueusement longue avec des imbrications de partout ? :/

                              Sinon pour ton problème, il n'y en a pas vraiment. La question est plutôt : Pourquoi testes-tu errno alors qu'il n'y a pas d'erreur ?

                              Dans ton code, tu fais un printf sur errno, de manière complètement gratuite, et ce même en cas de succès. errno ne contient pas de valeur utile en cas de succès.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                5 novembre 2006 à 1:06:41

                                Ben enffet, un peu plus loin, j'utilisais le errno pour voire les problèmes de connexion ... Et j'avais 84..

                                J'ai voulut remonter a la source, et c'est en plancant à cet endroit le errno que j'avais l'erreur, et juste avant pas d'erreur. Donc je m'étais dis.. y a un soucis...


                                Et pourquoi dis tu que mon code est indigeste ? o_O
                                Elle est pas trés longue.. mais bon, toutes les lignes sont commenté en plus...
                                Et je peut mettre plus de 10 lignes quand même... :lol:

                                Non je sais pas... dis moi comment tu l'aurai écrite cette fonction ?? Je ne demande qu'a apprendre !! ^^
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  5 novembre 2006 à 2:30:16

                                  Citation : zedtux

                                  Ben enffet, un peu plus loin, j'utilisais le errno pour voire les problèmes de connexion ... Et j'avais 84..

                                  J'ai voulut remonter a la source, et c'est en plancant à cet endroit le errno que j'avais l'erreur, et juste avant pas d'erreur. Donc je m'étais dis.. y a un soucis...


                                  Et pourquoi dis tu que mon code est indigeste ? o_O
                                  Elle est pas trés longue.. mais bon, toutes les lignes sont commenté en plus...
                                  Et je peut mettre plus de 10 lignes quand même... :lol:

                                  Non je sais pas... dis moi comment tu l'aurai écrite cette fonction ?? Je ne demande qu'a apprendre !! ^^



                                  * Trop commenté... (et surtout commentaires inutiles... si tu as besoin de faire des séparations en blocs dans tes fonctions, il serait ptet temps d'en faire plusieurs)

                                  * Noms de variables contre-intuitifs. Exemple : rintPrt au lieu de port, tout simplement...

                                  * Les printf de partout c'est laid et complètement inutilisable, une fonction ne devrait pas mélanger interface et tâches de fond.

                                  * Au lieu d'afficher des messages à tout va, définie des contraintes pour tes fonctions et effectue des tests des entrées utilisateur à part, et des tests internes dans tes fonctions.

                                  * stderr existe.

                                  * strncpy est laid, utilise strncat ou autre. En fait tu utilises les fonctions un peu n'importe comment, il y a des bcopy un peu n'importe où, tu utilises perror et à d'autres endroit, tu ne l'utilises pas.. enfin c'est assez chaotique.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    5 novembre 2006 à 12:20:48

                                    Alors la mon petit rz0, tu es de bien mauvaise fois...
                                    Aller, je te répond ! ^^

                                    Citation : rz0

                                    * Trop commenté... (et surtout commentaires inutiles... si tu as besoin de faire des séparations en blocs dans tes fonctions, il serait ptet temps d'en faire plusieurs)



                                    Moi je suis dans un monde libre, du coup je vais donner mes sources à tout le monde.
                                    Et parmis ce tout le monde, il y a des débutant !! ( pas la peine que j'aille plus loin dans mon explication je pense... )


                                    Citation : rz0

                                    * Noms de variables contre-intuitifs. Exemple : rintPrt au lieu de port, tout simplement...



                                    Là tout simplement je te répondrais... intoxication du boulot !
                                    Bon c'est pas dur, et une fois que je t'aurai expliqué tu utilisera peut être la méthode !!! :lol:

                                    Prenons ton exemple : rintPrt

                                    le r c'est pour Result car c'est une variable résultant de l'appelle de la fonction...
                                    Si je l'avais déclaré localement dans ma fonction, j'aurai mis l pour local et si je l'avais déclaré globalement pour tout le projet, j'aurai mis un g.
                                    Ensuite int. int pour integer. Si je voulais une String, j'aurai mis str, un double dbl, un booleen bln etc....

                                    Puis Prt pour Port. Si je voulais une variable pour stocker la couleur de la voiture de john j'aurai fais : JonCarCol ( Oui je bosse dans une boite ou l'on doit parler, et écrire anglais... :(


                                    Citation : rz0

                                    * Les printf de partout c'est laid et complètement inutilisable, une fonction ne devrait pas mélanger interface et tâches de fond.



                                    Mouais, là je suis pas trop d'accord avec toi...

                                    Citation : rz0

                                    * Au lieu d'afficher des messages à tout va, définie des contraintes pour tes fonctions et effectue des tests des entrées utilisateur à part, et des tests internes dans tes fonctions.



                                    Heu... en gros j'ai le droit à un printf et c'est tout ??? o_O

                                    Citation : rz0

                                    * stderr existe.



                                    Ouais et donc ?? ( Je te remet ma petite phrase de mon poste précédent :

                                    Citation : zedtux

                                    Je ne demande qu'a apprendre !! ^^



                                    Citation : rz0

                                    * strncpy est laid, utilise strncat ou autre. En fait tu utilises les fonctions un peu n'importe comment, il y a des bcopy un peu n'importe où, tu utilises perror et à d'autres endroit, tu ne l'utilises pas..



                                    alors là, le strncpy, c'est un gas du forum qui m'avais dis de le prendre. Mais bon même sens ca, je la trouve trés cette fonction ?? Qu'est ce que tu lui reproche ??? Tu n'as pas appris à coder avec, donc elle est pourris ? o_O
                                    Les bcopy... enfin LE bcopy sert à insérer l'adresse IP dans la structure. J'aurai put le faire autrement, mais le site que j'étudiais à ce moment là faisait ca... et ma fois, moi je n'ai rien à reprocher.
                                    perror est utilisé partout.. La fonction que tu voie "Erreur()" utilise perror ^^

                                    Citation : rz0

                                    enfin c'est assez chaotique



                                    Tu n'y vas pas de main morte... Surtout que j'attend toujours ton code :lol:


                                    Non aller, fais moi un petit bout de code.... Impressionne moi ! :lol:
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      5 novembre 2006 à 13:58:38

                                      Citation : zedtux

                                      Alors la mon petit rz0, tu es de bien mauvaise fois...
                                      Aller, je te répond ! ^^



                                      ...je te donne des conseils, après libre à toi de ne pas écouter.

                                      Citation

                                      Citation : rz0

                                      * Trop commenté... (et surtout commentaires inutiles... si tu as besoin de faire des séparations en blocs dans tes fonctions, il serait ptet temps d'en faire plusieurs)



                                      Moi je suis dans un monde libre, du coup je vais donner mes sources à tout le monde.
                                      Et parmis ce tout le monde, il y a des débutant !! ( pas la peine que j'aille plus loin dans mon explication je pense... )

                                      </citation>

                                      Merveilleux, il y a une différence entre commenter de manière à faire comprendre et commenter pour ne rien dire.

                                      ex.:
                                                                      // Sinon
                                                                      } else {


                                      Le débutant, soit il fait du C, soit il n'en fait pas ; s'il en fait, le commentaire ne sert à rien, s'il n'en fait pas, je ne vois pas pourquoi il lirait ton code.

                                      Citation

                                      Citation : rz0

                                      * Noms de variables contre-intuitifs. Exemple : rintPrt au lieu de port, tout simplement...



                                      Là tout simplement je te répondrais... intoxication du boulot !
                                      Bon c'est pas dur, et une fois que je t'aurai expliqué tu utilisera peut être la méthode !!! :lol:



                                      J'ai vu des tas de conventions, dont la tienne... Mais ce n'est pas le problème, simplement abréger port en Prt pour gagner une lettre, c'est criminel... j'ai dû avancer dans le code jusqu'en plein milieu pour comprendre à quoi cela servait...

                                      Citation

                                      Prenons ton exemple : rintPrt

                                      le r c'est pour Result car c'est une variable résultant de l'appelle de la fonction...
                                      Si je l'avais déclaré localement dans ma fonction, j'aurai mis l pour local et si je l'avais déclaré globalement pour tout le projet, j'aurai mis un g.
                                      Ensuite int. int pour integer. Si je voulais une String, j'aurai mis str, un double dbl, un booleen bln etc....



                                      Une variante de la notation hongroise, rien de surprenant. Que tu l'utilises est une chose, mais n'abrège pas de manière si ambiguë. Par exemple, tu as Prt pour port et Log pour login, alors que j'ai d'abord compris Prt pour print (affichage de messages ou pas) et Log pour log file...

                                      Citation

                                      Citation : rz0

                                      * Les printf de partout c'est laid et complètement inutilisable, une fonction ne devrait pas mélanger interface et tâches de fond.



                                      Mouais, là je suis pas trop d'accord avec toi...



                                      Réusabilité... mais tu fais comme tu veux... je te donne mon avis mais si tu n'as pas envie de remettre cette pratique en question, ce n'est pas à moi de forcer les gens.

                                      Si tu n'affiches pas du texte dans tous les sens, tu as une chance de pouvoir recycler ta fonction dans une bibliothèque ou une autre avec très peu d'arrangement... en même temps étant donné toutes les tâches associées à ta seule fonction, il y aurait du mal. Une fonction devrait faire une tâche et la faire bien.

                                      Citation

                                      Citation : rz0

                                      * Au lieu d'afficher des messages à tout va, définie des contraintes pour tes fonctions et effectue des tests des entrées utilisateur à part, et des tests internes dans tes fonctions.



                                      Heu... en gros j'ai le droit à un printf et c'est tout ??? o_O



                                      C'est le même sujet que plus haut. Si tu externalises la gestion interactive des erreurs, cela la rendra plus flexible et le tout plus maintenable, c'est tout. Si tu as des interactions avec l'utilisateur dans tous les coins de ton programme...

                                      Citation

                                      Citation : rz0

                                      * stderr existe.



                                      Ouais et donc ?? ( Je te remet ma petite phrase de mon poste précédent :

                                      Citation : zedtux

                                      Je ne demande qu'a apprendre !! ^^



                                      Un message d'erreur = une sortie d'erreur. Pourquoi affiches-tu tes messages d'erreur sur la sortie normale ?

                                      Citation

                                      Citation : rz0

                                      * strncpy est laid, utilise strncat ou autre. En fait tu utilises les fonctions un peu n'importe comment, il y a des bcopy un peu n'importe où, tu utilises perror et à d'autres endroit, tu ne l'utilises pas..



                                      alors là, le strncpy, c'est un gas du forum qui m'avais dis de le prendre. Mais bon même sens ca, je la trouve trés cette fonction ?? Qu'est ce que tu lui reproche ???



                                      RTM : man strncpy, il y a un bogue historique connu avec strncpy. Ici ce n'est pas dangereux mais ce n'est pas une bonne idée de l'utiliser.

                                      Citation

                                      Tu n'as pas appris à coder avec, donc elle est pourris ? o_O



                                      ...si tu te sens obligé d'en arriver à des sarcasmes personnels. Mais penser que tu connais assez bien le C pour insulter les gens au passage, étant donné ton niveau apparent, ne t'apportera rien.

                                      Citation

                                      Les bcopy... enfin LE bcopy sert à insérer l'adresse IP dans la structure. J'aurai put le faire autrement, mais le site que j'étudiais à ce moment là faisait ca... et ma fois, moi je n'ai rien à reprocher.



                                      RTM : man bcopy. Cette fonction est un cas historique remplacé par memcpy depuis longtemps, qui, en plus, fait partie de la norme C.

                                      Citation

                                      perror est utilisé partout.. La fonction que tu voie "Erreur()" utilise perror ^^



                                      Non, tu mélanges ta propre gestion d'erreurs (au retour du select par exemple) et les perror ailleurs. Fais au moins que ce soit homogène pour la gestion des errno. Soit tu gères tous les errno avec perror, soit tous avec ta propre gestion d'erreurs, le mélange est, à mon avis, bien inutile, d'autant plus que tu te contentes d'afficher un message, ce que perror ferait tout aussi bien.

                                      Citation

                                      Citation : rz0

                                      enfin c'est assez chaotique



                                      Tu n'y vas pas de main morte... Surtout que j'attend toujours ton code :lol:


                                      Non aller, fais moi un petit bout de code.... Impressionne moi ! :lol:



                                      Je n'ai pas de temps à perdre, et j'ai la flemme honnêtement d'aider quelqu'un qui préfère lancer des provocations personnelles qu'écouter des conseils. Si tu crois tellement que tu maîtrise le C, libre à toi ; je n'ai rien à gagner de te voir changer ou pas.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        5 novembre 2006 à 14:43:53

                                        rz0 a évidement raison : ton code est peu compréhensible. Ce n'est pas parce que tu veux faire un truc réutilisable que tu dois tout mettre dans une seule fonction, bien au contraire.
                                        Et ceci, pour le commun des mortels qui choppe une ligne de ton code parce qu'il cherche un truc ou autre :
                                        lstrFtpPas = (char *)malloc(strlen(rstrPas)*sizeof(char)+1);

                                        C'est illisible. Ya des imbrications de parenthèse partout, le cast n'est pas nécessaire en C et on se demande ce qu'il fout là. Le sizeof(char) n'est pas vraiment utile et le nom de ta variable est très mal choisi.
                                        Bref, ça marche peut-être très bien (ce dont je doute, voir les remarques sur la gestion des erreurs de rz0), mais c'est laid, et personnellement je n'utiliserais jamais un truc pareil pour ces raisons.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          5 novembre 2006 à 15:41:46

                                          Putain ca va.. vous êtes bien simpas...
                                          Bon ben je me la garde pour moi ma lib, et aller vous faire voire.

                                          Je veux bien être gentil avec vous, mais faut pas me prendre pour un con.

                                          Vous faites des remarques absoluement pas constructive !!
                                          Je sais pas, au lieu de faire les malins, vous feriez mieux de donner des explications.

                                          Puis le nom de mes variables sont trés bien chosis.. Pourtant j'ai expliqué.

                                          Aller tchaos !
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Un printf ... puis errno = 84

                                          × 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