Langage C - diviser une variable de type char*
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Langage C - diviser une variable de type char*



  1. #1
    Philippe8

    Langage C - diviser une variable de type char*


    ------

    Bonjour,
    j'ai une chaîne de type char : char *dates = "020422";
    Je voudrai créer une fonction qui extrait sous forme de char* le jour "02", le mois "04" et l'année "22".

    Merci pour votre aide.

    -----

  2. #2
    Jack
    Modérateur

    Re : Langage C - diviser une variable de type char*

    Il va falloir en dire plus sur le prototype de la fonction parce que par principe une fonction ne peut renvoyer qu'une seule valeur.
    De plus, on ne sait pas exactement ce sur quoi portent tes pointeurs: un tableau de 2 caractères ou des chaines (a zéro terminal).

    A mon avis, l'idéal serait de retourner une structure en tout cas.

  3. #3
    Philippe8

    Re : Langage C - diviser une variable de type char*

    Bonsoir Jack,
    il peut s'agir d'une procédure car effectivement une fonction ne renvoie qu'une seule valeur.
    Il s'agit d'un programme arduino :
    char *dates = "020422";
    void setup() {
    Serial.begin(9600);

    }

    void loop() {
    Serial.println(dates);

    }
    je dois pouvoir récupérer le jour, la date, l'année sous la forme d'une chaîne de caractère afin de pouvoir traiter ces variables.
    char *jour ="02"
    char *mois ="04"
    char *année = "22"

    Il s'agit de chaines ce caractères (c-string) et non pas de String.
    Merci par avance

  4. #4
    Philippe8

    Re : Langage C - diviser une variable de type char*

    En fait dates est un élément parmi d'autres d'un tableau de char (a zéro terminal).
    dates = variable[7];
    je transmets cette variable à une procédure :

    void time (char *Dates ) {
    //char annee, mois, jour[2];
    // sprintf(jour, "%2c", lesDates);
    Serial.print(Dates );

    }
    J'essaye de trouver un moyen de parser la variable "020422" en trois variables globales au format char : jour mois année ==> "02" "04" "22".
    Dernière modification par Philippe8 ; 02/04/2022 à 17h22.

  5. A voir en vidéo sur Futura
  6. #5
    pm42

    Re : Langage C - diviser une variable de type char*

    Citation Envoyé par Philippe8 Voir le message
    J'essaye de trouver un moyen de parser la variable "020422" en tois jour mois année ==> "02" "04" "22".
    "020422" n'est pas une variable mais une valeur.

    Ensuite, tu n'as pas besoin de passer. Tu peux simplement recopier Dates[0] et Dates[1] dans une autre variable, mettre un zéro après et tu auras ton "02". Idem pour les suivant.
    Par contre la gestion de la mémoire où stocker les résultats reste ouverte.

  7. #6
    Jack
    Modérateur

    Re : Langage C - diviser une variable de type char*

    Citation Envoyé par pm42 Voir le message
    Ensuite, tu n'as pas besoin de passer. Tu peux simplement recopier Dates[0] et Dates[1] dans une autre variable, mettre un zéro après et tu auras ton "02". Idem pour les suivant.
    Je voyais les choses comme cela également.
    Pour la structure, on peut partir comme ça par exemple:
    Code:
    struct date_t{
      char jour[3];
      char mois[3];
      char annee[3];
    } date;
    pour remplir les champs:
    Code:
    date.jour[0] = dates[0];
    date.jour[1] = dates[1];
    date.jour[2] = 0;
    date.mois[0] = dates[2];
    //etc.

  8. #7
    pm42

    Re : Langage C - diviser une variable de type char*

    Oui, c'est sans doute ce qu'il y a de plus propre et cela gère bien l'allocation mémoire (l'enfer avec les char* en C).

  9. #8
    Philippe8

    Re : Langage C - diviser une variable de type char*

    Merci à vous. J'ai essayé un truc comme ça en début d'après-midi mais ça ne marchait pas. Il y a des jours où rien ne va !!!
    C'était simple et grâce à vous je trouve ça et ça marche :


    char *dates = "020422";
    void setup() {
    Serial.begin(9600);

    }

    void loop() {
    Dates(dates);

    }

    char Dates(char *lesDates ) {
    char annee[3], mois[3], jour[3];
    jour[0]= lesDates[0];
    jour[1]= lesDates[1];
    jour[2]= '\0';
    mois[0]= lesDates[2];
    mois[1]= lesDates[3];
    mois[2]= '\0';
    annee[0] = lesDates[4];
    annee[1] = lesDates[5];
    annee[2]= '\0';
    Serial.print("20");Serial.prin t(annee);Serial.print("-");Serial.print(mois);Serial.p rint("-");Serial.println(jour);

    }
    ça fonctionne très bien aussi avec les structures mais il n'y a donc pas plus simple avec ces char*
    Je ne doit pas utiliser la classe String trop problématique en matière de mémoire sur des petits µcontrôleurs arduino...

    Merci.

  10. #9
    polo974

    Re : Langage C - diviser une variable de type char*

    Un simple sscanf(date, "%2s%2s%2s", j, m, a); fait le job.

    Sinon, pour faciliter le tri de date (Ça finit toujours par arriver), il vaut mieux mettre au format année mois jours que le contraire (ou pire (du côté gb, bien sûr))...
    Jusqu'ici tout va bien...

  11. #10
    Philippe8

    Re : Langage C - diviser une variable de type char*

    Merci polo974
    Merci à tous
    Bonne soirée.

Discussions similaires

  1. exporter une variable de python en langage C
    Par chicho-bello dans le forum Programmation et langages, Algorithmique
    Réponses: 10
    Dernier message: 07/02/2016, 16h11
  2. Type de variable - Langage C
    Par Lechero dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 11/11/2012, 14h40
  3. Undefined function or method 'eml_assert' for input arguments of type 'char'!
    Par aydi dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 05/02/2011, 19h37
  4. PIC18F & langage C : Sauvegarder une variable dans la rom
    Par inviteeaf9391c dans le forum Électronique
    Réponses: 14
    Dernier message: 08/02/2010, 14h04
  5. [C]-Conversion Int -> Char, Float -> Char, ...
    Par jorg1n dans le forum Électronique
    Réponses: 2
    Dernier message: 25/06/2008, 11h05