IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Problème très étrange !


Sujet :

C

  1. #1
    Membre éclairé Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Par défaut Problème très étrange !
    Bonjour, j'ai un problème étrange.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #include <stdio.h>
    #include <stdlib.h>
    #include "myHeader.h"
     
    int main(void)
    {
      int hasard = 296, argent;
      char code[2], saisie[2];
     
      sprintf(code, "%u", hasard);
      fprintf(stdout, "%s", code);
     
      system("PAUSE");
      return 0;
    }
    Il devrait afficher 29 au lieu de 296 sachant que code se décompose comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    code[0] = '\0';
    code[1]= '2';
    code[2]= '9';
    Je ne comprend pas.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Il devrait afficher 29 au lieu de 296
    Tout à fait normal (si on peut dire) même si c'est absolument incorrect. La fonction sprintf ne protège pas contre les dépassements de tableau.
    Ton raisonnement est erroné. Voici ce que tu as si on reprends ta décomposition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    code[0] = '2';
    code[1] = '9';
    code[2] = '6'; /* On sort du tableau. ABSOLUMENT INCORRECT */
    code[3] = '\0'; /* Fin de la chaîne en dehors des bornes du tableau. A EVITER */
    Si tu avais code[0] = '\0', ta chaîne de caractères serait de longueur nulle. Rien ne s'afficherait. En C une chaîne de caractères est terminée par '\0'.

    Utilise snprintf ('ISO C99') à la place qui n'écrit pas plus de n caractères. Il devrait t'afficher 2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    snprintf(code, sizeof code, "%d", hasard);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    code[0] = '2';
    code[1] = '\0'; /* Plus de place pour écrire la suite de la chaine, on la termine alors */

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 970
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 970
    Par défaut
    Jio,

    Ce n'est sans doute pas ça que contient code, qui de toute manière n'a pas une taille suffisante pour contenir la chaîne désirée (pour mettre 296 dans une chaîne, il faut 3 + 1 = 4 caractères).

    D'autre part, hasard est un int, alors pouquoi utiliser un formatage pour un unsigned dans le sprintf ?

  4. #4
    Membre éclairé Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Par défaut
    Merci aoyou
    Sinon c'est une erreur, c'est bien %i que je voulais mettre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème très étrange
    Par bobyboby dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 17/10/2008, 14h14
  2. Problème trés étrange
    Par laygen dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 09/08/2008, 17h05
  3. Réponses: 5
    Dernier message: 12/07/2007, 10h07
  4. problème très étrange avec mes tableaux
    Par lelutin dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/09/2006, 14h47
  5. Problème très étrange...
    Par TitiFr dans le forum Requêtes
    Réponses: 4
    Dernier message: 31/03/2005, 21h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo