Partage
  • Partager sur Facebook
  • Partager sur Twitter

Besoin d'une confirmation sur un code source

Analyse d'un code source datant de 2001

Sujet résolu
    4 octobre 2018 à 12:58:50

    Bonjour,

    Je suis entrain de reprendre le code source (soit-disant C++) datant de 2001 permettant de traiter le fichier de configuration CSV d'un protocole de communication particulier.

    Dans le code, j'ai été interpelé par les lignes suivante (car pas sûr que c'est correcte) :

    
    [...]
    char* temp;
    unsigned short tab[32] = {0};
    for(unsigned ii=0; ii < wc; ii++)
    {
        tab[ii] = (unsigned short)strtol((*m_csvPtr)[3+ii], &temp, 16);
    }
    [..]
    

    Ce que je comprends, c'est qu'on déclare un pointeur sans l'initialiser (pas d'allocation de mémoire). On convertit le contenu du CSV voulu ( (*m_csvPtr)[3+ii] ) en nombre entier. Le contenu du CSV utilisant la base hexadécimal (0x0000), on met le dernier paramètre "16" qui précise la base. S'il y a des caractères restants non traités par la conversion, on place l'adresse du pointeur "temp" à l'adresse de cette chaine restante (tail).

    Est-ce que ce code est correcte ? Ai-je bien compris ?

    • Partager sur Facebook
    • Partager sur Twitter
    Les seules questions bêtes sont celles qui ne sont pas posées. Mieux vaut paraître bête une fois que de le rester à vie."Vis comme si tu devais mourir demain. Apprends comme si tu devais vivre toujours."
      4 octobre 2018 à 14:28:55

      Non.

      http://www.cplusplus.com/reference/cstdlib/strtol/

      >On convertit le contenu du CSV voulu ( (*m_csvPtr)[3+ii] )

      Nope

      m_csvPtr doit être un pointeur sur un tableau de pointeur de chaine de caractères.

      "(*m_csvPtr)[3+ii]" est l'adresse d'une chaine de caractère.

      >on place l'adresse du pointeur "temp" à l'adresse de cette chaine restante (tail).

      et "nullptr" au lieu de &temp serait bien plus clair.

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        8 octobre 2018 à 22:26:25

        Exemple d'utilisation :

        #include <stdio.h>
        #include <stdlib.h>
        
        int main(void)
        {
          char chaine[] = "  2B+autre chose";
        
          char * suite;
          long nombre = strtol(chaine, &suite, 16);
          printf("nombre = %ld, suite = \"%s\"\n", nombre, suite);
          
          return 0;
        }

        affiche

        nombre = 43, suite = "+autre chose"
        


        Pour ne récupérer que le nombre, on peut passer NULL au lieu de l'adresse d'un pointeur.

        long nombre = strtol(chaine, NULL, 16);





        -
        Edité par michelbillaud 8 octobre 2018 à 22:29:54

        • Partager sur Facebook
        • Partager sur Twitter
          10 octobre 2018 à 13:32:43

          Bonjour,

          Ok, merci pour vos réponses !

          • Partager sur Facebook
          • Partager sur Twitter
          Les seules questions bêtes sont celles qui ne sont pas posées. Mieux vaut paraître bête une fois que de le rester à vie."Vis comme si tu devais mourir demain. Apprends comme si tu devais vivre toujours."

          Besoin d'une confirmation sur un code source

          × 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