[résolu] Pb de Chaîne avec Char

Bonjour à vous,

J’ai un petit code :

/ Ajoute un '0' si un seul digit
char* AffZero(word nombre)
{
  char mes[5];
  char nbr[5];
  mes[0] = '\0';
  if (nombre < 10) strcat(mes, "0\0");
  itoa(nombre, nbr, 10);
  strcat(mes, nbr);
  return mes;
}

Il doit retourner un nombre en chaîne de caractère commencent par un 0 … mais, le résultat change à chaque exécution ??? Le système de gestion des chaînes est assez pourri par rapport au Pascal :frowning:

J’ai beau modifier le code, cela ne fonctionne pas de manière répétitive, une histoire de pointeur ou de fin de chaîne ?

J’ai testé en mettant un ‘\0’ en fin de nbr, pareil, en jouant sur le type de variable : pareil…

Je suis sur un Mega avec de la mémoire RAM à revendre !

Merci de votre aide.
Jean-Nono

Bonjour,

La variable mes existe uniquement dans ta fonction AffZero. Donc quand tu fait return mes, la valeur pointée pas mes n’est plus valide.

Si tu veux que mes persiste après la fin de la fonction il faut la déclarer statique.
static char mes[5];

La limitation c’est que mes sera réinitialisée au prochain appel de la fonction.

Si tu veux convertir en chaîne de caractères un nombre enre 0 et 99, avec toujours 2 chiffres (c-à-d 00, 01, 02 ... 09, 10, 11 ...);

int valeur; // entre 0 et 99 !
char chaine[4];
sprintf ( chaine, "%02d", valeur );

C'est pas la peine de réinventer la roue :slight_smile:

biggil:
Si tu veux convertir en chaîne de caractères un nombre enre 0 et 99, avec toujours 2 chiffres (c-à-d 00, 01, 02 ... 09, 10, 11 ...);

int valeur; // entre 0 et 99 !

char chaine[4];
sprintf ( chaine, "%02d", valeur );



C'est pas la peine de réinventer la roue :)

Très bien, sauf que je ne désire pas imprimer, je désir récupérer la valeur dans une variable, comment je fais ?

Merci d'avance.

Jean-Nono

Très bien, sauf que je ne désire pas imprimer, je désir récupérer la valeur dans une variable, comment je fais ?

sprintf() n'est pas une fonction d'impression
pour récupérer la valeur dans une variable, tu fais comme on t'as indiqué

sprintf ( chaine, "%02d", valeur );

sprintf() imprime "en mémoire", à l'adresse qu'on lui passe en 1er argument.
Ta variable est le tableau chaine[]