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 :

[sortie standard] problème d'affichage


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Par défaut [sortie standard] problème d'affichage
    Rebonjour à tous,

    j'ai un problème d'affichage des sauts de ligne et des tabulations avec la fonction printf.

    en sortie, j'obtiens une chaine comprenant des \n et \t textuellement au lieux d'avoir des sauts et tabulations.

    je récupère les chaines à partir d'un fichier texte (fgets) et les stock dans des tableaux.

    ensuite j'ai une fonction qui va chercher la chaine en fonction d'une clé et qui la retourne,
    ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf(getMessage("key"));
    j'ai deux petites choses qui ne vont pas aussi:
    - la chaine comprend toujours le saut de ligne ajouté à la fin par fgets
    - j'ai un warning qui me dit "warning: improper pointer/integer combination: arg #1" alors que ma fonction retourne bien un char *

    Merci d'avance

  2. #2
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Citation Envoyé par beekeep
    j'ai un problème d'affichage des sauts de ligne et des tabulations avec la fonction printf.

    en sortie, j'obtiens une chaine comprenant des \n et \t textuellement au lieux d'avoir des sauts et tabulations.

    je récupère les chaines à partir d'un fichier texte (fgets) et les stock dans des tableaux.
    Peux tu montrer un extrait de ton fichier?

    Citation Envoyé par beekeep
    la chaine comprend toujours le saut de ligne ajouté à la fin par fgets
    A toi de mettre un caractère de fin de chaine à la place du saut de ligne.

    Citation Envoyé par =beekeep
    j'ai un warning qui me dit "warning: improper pointer/integer combination: arg #1" alors que ma fonction retourne bien un char *
    Peux tu montrer le code?

  3. #3
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Par défaut
    Citation Envoyé par homeostasie
    Peux tu montrer un extrait de ton fichier?
    fichier texte classique (clé/valeur):
    [Msg_INFO_Msg19]
    \n \t\t%s for the program %d,
    ---
    Citation Envoyé par homeostasie
    Peux tu montrer le code?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf(getMessage("Msg_INFO_Msg19"));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char * getMessage(char * key)
    {
      char ** tab = NULL;
      ..
      return tab[i];
    }
    ça t'aide ?

  4. #4
    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
    Tu n'as pas de warning indiquant l'absence de prototype de getMessage au moment du printf ?

  5. #5
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Ben tu retournes une adresse tab[i], on se sait pas comment est allouée cette adresse si elle est locale où si elle correspond à une adresse allouée par malloc, donc il faut plus de détails.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  6. #6
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char * getMessage(char * key)
    {
      char ** tab = NULL;
      ..
      return tab[i];
    }
    Le prototype serait plutot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char * getMessage(char const * key)
    {
      char ** tab = NULL;
      ..
      return tab[i];
    }

  7. #7
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Par défaut
    Citation Envoyé par diogene Voir le message
    Tu n'as pas de warning indiquant l'absence de prototype de getMessage au moment du printf ?
    non, il manque le prototype dans un .h c'est ça ?

    Citation Envoyé par Trap D
    Ben tu retournes une adresse tab[i], on se sait pas comment est allouée cette adresse si elle est locale où si elle correspond à une adresse allouée par malloc, donc il faut plus de détails.
    elle correspond à une adresse allouée avec malloc.

  8. #8
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    OK, et que copies-tu dedans.
    Au fait, comment est alloué tab ?
    Tu n'aurais pas des problèmes de fuite mémoire par hasard quelque part ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  9. #9
    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
    Citation Envoyé par beekeep Voir le message
    non, il manque le prototype dans un .h c'est ça ?
    Le prototype de getMessage est-il connu au moment du printf (getMessage définie avant le printf ou présence avant le printf d'un prototype)

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par beekeep Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf(getMessage("key"));
    On ne fait jamais ça. On passe toujours par la chaine de formatage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%s", getMessage("key"));
    sinon, certains caractères pourraient être interprétés de travers par printf().

  11. #11
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    On ne fait jamais ça. On passe toujours par la chaine de formatage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%s", getMessage("key"));
    sinon, certains caractères pourraient être interprétés de travers par printf().
    oui, mais les messages retournés par getMessage contiennent aussi des %s, %d ..

    en faisant comme ça je pourrai passer les variables à afficher comme avant ?

  12. #12
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Citation Envoyé par beekeep Voir le message
    oui, mais les messages retournés par getMessage contiennent aussi des %s, %d ..

    en faisant comme ça je pourrai passer les variables à afficher comme avant ?
    Dans ce cas, il me semble qu'il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf(getMessage("key"), <les arguments nécessaires>);
    si tu sais à chaque fois les arguments à envoyer.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  13. #13
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Par défaut
    Salut et merci,
    Citation Envoyé par Trap D Voir le message
    Dans ce cas, il me semble qu'il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf(getMessage("key"), <les arguments nécessaires>);
    si tu sais à chaque fois les arguments à envoyer.
    oui, j'avais testé cette fonctionnalité qui marche très bien.

    il faut vraiment que je trouve une solution pour le reste.

  14. #14
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Par défaut
    Bonjour à tous,

    petit up ..

    pourquoi les \n s'affichent tel quel au lieux d'avoir des saut de ligne ??
    (pour tester prendre un fichier texte avec une chaine contenant un \n sur la première ligne)

    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
    char * getMsg()
    {
      FILE * pFile = NULL;
      char line[512];
     
      pFile = fopen("messagesENG.conf","r");
     
      if(!pFile)
      {
        printf("IMPOSSIBLE D'ACCEDER AU FICHIER CONTENANT LES MESSAGES.\n");
        return 0;
      }
     
      while(fgets(line, 512, pFile) != NULL)
      {
            char *p = strrchr (line, '\n');
            if (p)
            {
                *p = 0;
            }
            return line;
      }
    }

    Merci

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

Discussions similaires

  1. Affichage sur la sortie standard
    Par lastico21000 dans le forum C
    Réponses: 8
    Dernier message: 18/10/2011, 13h45
  2. Réponses: 0
    Dernier message: 18/02/2008, 15h36
  3. Problème Entrée-Sortie standards
    Par rajuto dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 11/06/2007, 15h37
  4. Redirection sortie standard - Problème encoding
    Par schniouf dans le forum Langage
    Réponses: 4
    Dernier message: 12/12/2006, 13h51
  5. Affichage sur sortie standard
    Par boubouc dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 01/05/2006, 04h54

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