CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] Comment entrer une variable (float/double) dans un tableau de caractère ?

GennGrisetete
GennGrisetete
Niveau 35
14 juin 2020 à 21:46:40

Bonjour,
tout d'abord voici un exemple :


char tableau1[3];
float valeur = 1.9;
sprintf(tableau0,"%0.1f", valeur);

Je veux que mon tableau ressemble à
{ '1' , '.' , '9'}
sauf que ça fait n'importe quoi à la place

Si quelqu'un pouvait m'expliquer svp car ce que j'ai vu sur Internet n'est pas ce que je recherche
Merci d'avance

Message édité le 14 juin 2020 à 21:46:57 par GennGrisetete
GennGrisetete
GennGrisetete
Niveau 35
14 juin 2020 à 21:52:33

Je précise, je me suis trompé avec tableau0 et j'ai mis tableau 1 dans le sprintf

godrik
godrik
Niveau 30
14 juin 2020 à 22:11:55

c'est snprintf que tu veux.

Athuro83
Athuro83
Niveau 10
14 juin 2020 à 22:15:06

Bonsoir,

Je viens de tester ton extrait de code de mon côté et j'obtiens le résultat attendu.
Quelle méthode utilise-tu pour vérifier le fonctionnement de ton code ? (un test, un affichage du tableau, autre...)

Le seul problème potentiel de ton code, c'est que tu ne prends pas en compte le null byte \0 qui est ajouté par la fonction sprintf pour signaler la fin de la chaine de caractères : ton tableau doit alors faire 4 caractères.

GennGrisetete
GennGrisetete
Niveau 35
14 juin 2020 à 22:43:59

Le 14 juin 2020 à 22:15:06 Athuro83 a écrit :
Bonsoir,

Je viens de tester ton extrait de code de mon côté et j'obtiens le résultat attendu.
Quelle méthode utilise-tu pour vérifier le fonctionnement de ton code ? (un test, un affichage du tableau, autre...)

Le seul problème potentiel de ton code, c'est que tu ne prends pas en compte le null byte \0 qui est ajouté par la fonction sprintf pour signaler la fin de la chaine de caractères : ton tableau doit alors faire 4 caractères.

Pour vérifier, je le fais en débuggage sur une carte Nucleo (je sais pas si c'est important) et je vérifie la valeur à travers le tableau des variables en pas à pas sur le logiciel.

Sinon j'avais pensé aussi avec le caractere de fin de tableau mais rien ne change

Message édité le 14 juin 2020 à 22:46:11 par GennGrisetete
Athuro83
Athuro83
Niveau 10
14 juin 2020 à 22:52:21

Le 14 juin 2020 à 22:43:59 GennGrisetete a écrit :

Le 14 juin 2020 à 22:15:06 Athuro83 a écrit :
Bonsoir,

Je viens de tester ton extrait de code de mon côté et j'obtiens le résultat attendu.
Quelle méthode utilise-tu pour vérifier le fonctionnement de ton code ? (un test, un affichage du tableau, autre...)

Le seul problème potentiel de ton code, c'est que tu ne prends pas en compte le null byte \0 qui est ajouté par la fonction sprintf pour signaler la fin de la chaine de caractères : ton tableau doit alors faire 4 caractères.

Pour vérifier, je le fais en débuggage sur une carte Nucleo (je sais pas si c'est important) et je vérifie la valeur à travers le tableau des variables en pas à pas sur le logiciel.

Sinon j'avais pensé aussi avec le caractere de fin de tableau mais rien ne change

Il s'agit de développement embarqué donc. Cela peut avoir son importance car les librairies proposées par la carte peuvent légèrement varier des librairies standard. Je sais par exemple que sur une carte embarquée sur laquelle je travaille, certaines options des format strings n'étaient pas supportées et menaient donc à des comportements étranges.

Cela vaudrait le coup que tu jettes un coup d'oeil à la documentation de sprintf proposée par la carte Nucléo. Généralement le fichier header où est définit le prototype de la fonction est un bon point de départ.
A voir si il n'existe pas des options spécifiques concernant la gestion des nombres flottants. C'est toujours un sujet non-trivial, surtout sur une carte embarquée dont la puissance est limitée.

En espérant que cela te mette sur la bonne piste !
Cordialement.

GennGrisetete
GennGrisetete
Niveau 35
14 juin 2020 à 22:54:42

Le 14 juin 2020 à 22:52:21 Athuro83 a écrit :

Le 14 juin 2020 à 22:43:59 GennGrisetete a écrit :

Le 14 juin 2020 à 22:15:06 Athuro83 a écrit :
Bonsoir,

Je viens de tester ton extrait de code de mon côté et j'obtiens le résultat attendu.
Quelle méthode utilise-tu pour vérifier le fonctionnement de ton code ? (un test, un affichage du tableau, autre...)

Le seul problème potentiel de ton code, c'est que tu ne prends pas en compte le null byte \0 qui est ajouté par la fonction sprintf pour signaler la fin de la chaine de caractères : ton tableau doit alors faire 4 caractères.

Pour vérifier, je le fais en débuggage sur une carte Nucleo (je sais pas si c'est important) et je vérifie la valeur à travers le tableau des variables en pas à pas sur le logiciel.

Sinon j'avais pensé aussi avec le caractere de fin de tableau mais rien ne change

Il s'agit de développement embarqué donc. Cela peut avoir son importance car les librairies proposées par la carte peuvent légèrement varier des librairies standard. Je sais par exemple que sur une carte embarquée sur laquelle je travaille, certaines options des format strings n'étaient pas supportées et menaient donc à des comportements étranges.

Cela vaudrait le coup que tu jettes un coup d'oeil à la documentation de sprintf proposée par la carte Nucléo. Généralement le fichier header où est définit le prototype de la fonction est un bon point de départ.
A voir si il n'existe pas des options spécifiques concernant la gestion des nombres flottants. C'est toujours un sujet non-trivial, surtout sur une carte embarquée dont la puissance est limitée.

En espérant que cela te mette sur la bonne piste !
Cordialement.

Merci :ok:
Je pensais pas que le développement embarqué influencait sur la programmation

godrik
godrik
Niveau 30
15 juin 2020 à 02:17:09

Je pensais pas que le développement embarqué influencait sur la programmation

Toutes les libc sont differentes, tous les compilateurs sont differents. Si tu ecris du code qui est a la norme du langage et des bibliotheques, alors le code devrait fonctionner pareil quelque soit l'environment. En l'occurence, ton appel a sprintf cause un buffer overflow sur tableau1. A partir de la, le code n'est plus au norme et tout et n'importe quoi peut arriver.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware