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 :

le printf magique


Sujet :

C

  1. #21
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par hegros Voir le message
    ok printf n'a jamais eu de bug c'est la plus parfaite des fonctions d'affichage
    Je te sens légèrement ironique, là... A ma connaissance, printf() est sans risque si on l'utilise correctement. Ce n'est pas le cas de gets(), par exemple, qu'il est impossible de faire fonctionner sans risques et qui est véritablement un bug. Même scanf() peut être utilisé de manière plus sure que gets().

    je n'ai rien invoqué, le %n s'est retrouvé là par hasard, suite à une erreur de frappe un % s'est inséré avant la chaîne que je voulais afficher, effectivement cette commande attend l'adresse d'un int et je lui donne n'importe quoi et elle me sort n'importe quoi, normal
    On a mis en évidence un bug du programmeur. Le langage C et sa bibliothèque ne sont pas en cause ici.
    en 2008 je pensais écrire la valeur de argc en 3d, j'étais loin, loin là bas dans la nuit noire et obscure...
    Comprends pas...
    Pas de Wi-Fi à la maison : CPL

  2. #22
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    pour le moment aucune explication de plus de pourquoi avec un printf le programme du PO marche et sans cela ne marche pas

    pour le moment c'est une variable non initialisée, printf perturbe positivement le comportement puisqu'il signale en quelque sorte un bug applicatif mais tout cela n'est pas dans la doc et c'est bien embêtant.

    pour mon exemple de %n c'est un problème de débutant que j'ai rencontré car ce n'est pas du tout cette commande que je voulais utilisé ni même ne voulais afficher le caractère spécial %

    soit des printf en vrac dans l'application en fonction de tracing ce n'est pas forcément une bonne idée...
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  3. #23
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par hegros Voir le message
    pour le moment aucune explication de plus de pourquoi avec un printf le programme du PO marche et sans cela ne marche pas
    Le P.O. a donné l'explication :

    Citation Envoyé par nicodn02
    Le problème venait d'une variable mal initialisé dans la fonction creerFeuilleRetrait.
    Ce à quoi j'ai évidemment répondu, comme tu l'aurais fait :
    Citation Envoyé par -ed-
    Ce qui entraine un comportement indéfini : tout peut arriver.

    http://emmanuel-delahaye.developpez.com/notes.htm#ub
    Il n'est pas inutile de lire les réponses, ça évite de tourner en rond...
    pour le moment c'est une variable non initialisée, printf perturbe positivement le comportement puisqu'il signale en quelque sorte un bug applicatif mais tout cela n'est pas dans la doc et c'est bien embêtant.
    Revois d'urgence la notion de comportement indéfini (UB). Ce n'est pas printf() qui est en cause, c'est le UB qui entraine n'importe quoi. A partir du moment où un UB s'est produit, plus rien ne fonctionne normalement, mais de façon imprévisible, par définition.
    soit des printf en vrac dans l'application en fonction de tracing ce n'est pas forcément une bonne idée...
    Tu n'as pas démontré pourquoi.

    - Ton exemple personnel montre qu'un UB fait n'importe quoi
    - Celui du P.O. aussi

    Ce que tu as démontré, c'est qu'il ne faut pas qu'il y ait de UB dans un programme, mais ça, on le savait déjà, et de plus, ça n'a aucun rapport avec printf().

    Bref, je ne vais pas tarder à nettoyer ce post...
    Pas de Wi-Fi à la maison : CPL

  4. #24
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    focus

    ce n'est pas une démonstration...ce qui m'intéresse c'est l'usage qu'il en faisait parce que sinon il n'y a pas de raison qu'une variable non initialisée provoque un UB par sa propre déclaration

    En tout cas aucune magie dedans.

    ciaos bye
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  5. #25
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hegros Voir le message
    il n'y a pas de raison qu'une variable non initialisée provoque un UB par sa propre déclaration
    Si tu écrit dans un pointeur non-initialisé tu écris n'importe où en mémoire, et tu obtiens un comportement indéfini :
    • Si tu as de la chance ca plante (ce qui t'oblige à rechercher l'origine du bug).
    • Si tu n'as pas de chance le programme semble se dérouler correctement, mais le bug peut ressurgir n'importe quand (et lorsque le bug ressurgit des mois plus tard lorsqu'on modifie une toute autre partie du programme c'est vraiment affreux à débugger...)



    Le simple fait de modifier une ligne de ton programme, ou même de le recompiler avec un compilateur différent peut faire resurgir le bug. La présence du printf() masquait le bug justement à cause de ce comportement indéfini... mais printf() n'était nullement en cause

    a++

  6. #26
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Si tu écrit dans un pointeur non-initialisé tu écris n'importe où en mémoire, et tu obtiens un comportement indéfini :
    • Si tu as de la chance ca plante (ce qui t'oblige à rechercher l'origine du bug).
    • Si tu n'as pas de chance le programme semble se dérouler correctement, mais le bug peut ressurgir n'importe quand (et lorsque le bug ressurgit des mois plus tard lorsqu'on modifie une toute autre partie du programme c'est vraiment affreux à débugger...)



    Le simple fait de modifier une ligne de ton programme, ou même de le recompiler avec un compilateur différent peut faire resurgir le bug. La présence du printf() masquait le bug justement à cause de ce comportement indéfini... mais printf() n'était nullement en cause

    a++
    mais toi tu es encore sur mon exemple alors que j'ai vu mon erreur (%n attends un int*), la citation que tu mets est en rapport avec le bug du PO(sa variable non initialisé n'est pas la mienne) et c'est celui là auquel je faisais maintenant allusion

    comme tu dis il y a de grandes chances que se soit une écriture, affectation dans une variable non initialisé (pas forcément pointeur d'ailleurs?)

    @+++
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Problème a l'affichage dans la console (printf)
    Par PhoneKilleR dans le forum C
    Réponses: 21
    Dernier message: 23/09/2003, 17h21
  2. printf avec %g
    Par barthelv dans le forum C
    Réponses: 4
    Dernier message: 15/09/2003, 09h08
  3. printf et LARGE_INTEGER
    Par KORTA dans le forum C
    Réponses: 10
    Dernier message: 05/09/2003, 15h20
  4. les accents et printf
    Par remi77 dans le forum C
    Réponses: 5
    Dernier message: 07/07/2003, 20h53
  5. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24

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