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 :

printf() n'affiche rien


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 56
    Par défaut printf() n'affiche rien
    Bonjour,

    J'ai un programme un peu trop long pour être posté. Mais dès que je passe dans une des fonctions, printf commence à déconner et n'affiche plus rien.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Group create_group(char name[], char* memb[], int size)
    {
      Group group;
     
      printf("On est dans create_group() : \n");
      group.name = name;
      group.size = size;
     
      printf("size = %d\n",group.size);
     
      for( int i = 0 ; i < group.size ; i++ )
        {
          group.members[i] = search_client(memb[i]);
        }
     
      printf("group %s created with :\n" , group.name);
      for( int i = 0 ; i < group.size ; i++ )
        {
          printf("%s\n" , (group.members[i])->name); // PROBLEME
         // j'ai essayé fflush(stdout) ici mais rien n'y fait.
        }
     
      return group;
    }
     
    //juste pour info, voici à quoi ressemble ma structure Group :
    typedef struct
    {
      char* name;
      Client* members[25];
      int size;
    }Group;
    printf s'arrête de fonctionner correctement apres son dernier passage dans la boucle for seulement, et je ne comprends absolument pas pourquoi. Le programme continue de s'executer normalement par la suite pourtant... Est-ce que ça pourrait être dû au fait que le champs "name" que j'affiche pourrait contenir une chaine de caractere qui ne se termine pas par \0 ?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 56
    Par défaut
    Quelques tests plus tard j'ai l'impression que
    • Soit mon programme est sacrément buggé
    • Soit le problème vient d'ailleurs (terminal ?)


    En effet j'ai commenté tout le corps de ma fonction comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Group create_group(char name[], char* memb[], int size)
    {
      Group group;
     
      printf("On est dans create_group() : \n");
      // commentaires
      printf("On sort de create_group();\n");
      return group;
    }
    Résultat : le deuxième printf ne s'affiche pas, mais le premier oui.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Group create_group(char name[], char* memb[], int size)
    {
      Group group;
      // commentaires
      printf("On sort de create_group();\n");
      return group;
    }
    Résultat : rien ne s'affiche

    WTF ????

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Group create_group(char name[], char* memb[], int size)
    {
      Group group;
    ....
      group.name = name;
    Il est à peu près sûr que ce genre de code va poser problème à un moment donné :
    group.name = name; Copie l'adresse name du début du tableau contenant la chaine de caractères mais pas la chaine de caractères elle-même. Si ce tableau vient à être réutilisé pour stocker une autre chaine, alors c'est cette autre chaine dont on aura l'adresse et tous les group.name pointeront vers cette nouvelle chaine. Si ce tableau vient à être détruit, alors cette adresse deviendra invalide et l'accès à un group.name fera planter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    group.members[i] = search_client(memb[i]);
    On ne connait pas la fonction search_client(), mais d'après son nom, on peut supposer qu'elle renvoie un pointeur vers le Client (type qui n'est pas déclaré dans le segment de code proposé) identifié par memb[i]. On peut supposer alors qu'elle renvoie NULL si le Client n'est pas trouvé. Dans ce dernier cas printf("%s\n" , (group.members[i])->name); va planter.

    Est-ce que ça pourrait être dû au fait que le champs "name" que j'affiche pourrait contenir une chaine de caractere qui ne se termine pas par \0 ?
    %s impose que la chaine soit correctement terminée par '\0'. La première chose à faire est de s'assurer qu'on construit des chaines correctes.

    Quelques tests plus tard j'ai l'impression que
    Soit mon programme est sacrément buggé
    Soit le problème vient d'ailleurs (terminal ?)
    Le problème vient d'ailleurs (pas du terminal) ET est sacrément buggé

  4. #4
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 190
    Par défaut
    salut !

    je confirme : si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Group create_group(char name[], char* memb[], int size)
    {
      Group group;
      // commentaires
      printf("On sort de create_group();\n");
      return group;
    }
    n'affiche rien, c'est que ton programme est sacrément buggé !

    A+

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 56
    Par défaut
    Un immense et très sincère MERCI diogene pour tes conseils. Effectivement mon code était tout moisi de partout. Je me suis repenché sur l'utilisation des malloc aussi et ça m'a fait du bien.

Discussions similaires

  1. printf n'affiche rien sur l'ecran
    Par M77ATTAR dans le forum C
    Réponses: 1
    Dernier message: 17/09/2011, 19h21
  2. problème de printf: n'affiche rien
    Par fomazou dans le forum Débuter
    Réponses: 15
    Dernier message: 21/04/2009, 15h09
  3. pourquoi mon quickreport n'affiche rien ?
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 8
    Dernier message: 31/07/2005, 00h59
  4. [LG]Programme qui n'affiche rien
    Par ousunas dans le forum Langage
    Réponses: 4
    Dernier message: 17/02/2004, 19h38
  5. Opengl n'affiche rien.
    Par Fugus02 dans le forum OpenGL
    Réponses: 4
    Dernier message: 06/01/2004, 15h41

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