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.
-----

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.
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.
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 :
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 *dates = "020422";
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(dates);
}
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
En fait dates est un élément parmi d'autres d'un tableau de char (a zéro terminal).
je transmets cette variable à une procédure :dates = variable[7];
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".void time (char *Dates ) {
//char annee, mois, jour[2];
// sprintf(jour, "%2c", lesDates);
Serial.print(Dates );
}
Dernière modification par Philippe8 ; 02/04/2022 à 18h22.
"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.
Je voyais les choses comme cela également.
Pour la structure, on peut partir comme ça par exemple:pour remplir les champs:Code:struct date_t{ char jour[3]; char mois[3]; char annee[3]; } date;
Code:date.jour[0] = dates[0]; date.jour[1] = dates[1]; date.jour[2] = 0; date.mois[0] = dates[2]; //etc.
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).
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 :
ça fonctionne très bien aussi avec les structures mais il n'y a donc pas plus simple avec ces char*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);
}
Je ne doit pas utiliser la classe String trop problématique en matière de mémoire sur des petits µcontrôleurs arduino...
Merci.
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...
Merci polo974
Merci à tous
Bonne soirée.
