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

Bibliothèque standard C Discussion :

[printf] Limiter l'affichage d'une chaine


Sujet :

Bibliothèque standard 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 corrector Voir le message
    Mais on ne sait pas (toujours) ce qu'on va y trouver si on l'a écrit en mode texte avant!
    On va y trouver exactement ce qu'il y a dans le fichier sans aucune interprétation. Tu t'attends à quoi comme erreur ?

    Attention, mon troll-o-mètre s'est réveillé...
    Pas de Wi-Fi à la maison : CPL

  2. #22
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    On va y trouver exactement ce qu'il y a dans le fichier sans aucune interprétation. Tu t'attends à quoi comme erreur ?
    Aucune erreur, je dis simplement que le contenu du fichier sans aucune interprétation est imprévisible, et qu'un programme qui s'attendrait à trouver quelque chose de précis ne serait pas portable.

    D'ailleurs, je doute que sur tous les systèmes, le mode binaire corresponde au fichier sans aucune interprétation; par exemple, avec un fichier d'enregistrements, cela ne me semble pas possible.

    Citation Envoyé par Emmanuel Delahaye Voir le message
    Attention, mon troll-o-mètre s'est réveillé...
    Laisse tomber, y a pas de troll...

  3. #23
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    On peut toujours ouvrir n'importe quel fichier en mode binaire...
    As-tu une référence pour cela? J'ai cherché rapidement et j'ai pas trouvé. Je ne suis pas sûr que ce soit vrai sous VMS ou n'importe quel OS qui connait plus sur la structure des fichiers que celles d'Unix ou de Windows. De mémoire -- cela fait longtemps que j'ai pas touché à VMS -- il y avait une le runtime C retournait une erreur quand on tentait d'ouvrir des fichiers d'un type qu'il ne gérait pas; mais je ne sais plus si la correspondance entre les types de fichiers du C et ceux de VMS se faisait ou pas de façon telle qu'il soit possible d'ouvrir en mode binaire un fichier écrit en mode texte.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  4. #24
    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 corrector Voir le message
    Aucune erreur, je dis simplement que le contenu du fichier sans aucune interprétation est imprévisible,
    C'est imprévisible si on a pas la doc, sinon, c'est la seule façon de lire n'importe quel fichier et tu le sais très bien vilain troll...
    Pas de Wi-Fi à la maison : CPL

  5. #25
    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 Jean-Marc.Bourguet Voir le message
    As-tu une référence pour cela? J'ai cherché rapidement et j'ai pas trouvé. Je ne suis pas sûr que ce soit vrai sous VMS ou n'importe quel OS qui connait plus sur la structure des fichiers que celles d'Unix ou de Windows. De mémoire -- cela fait longtemps que j'ai pas touché à VMS -- il y avait une le runtime C retournait une erreur quand on tentait d'ouvrir des fichiers d'un type qu'il ne gérait pas; mais je ne sais plus si la correspondance entre les types de fichiers du C et ceux de VMS se faisait ou pas de façon telle qu'il soit possible d'ouvrir en mode binaire un fichier écrit en mode texte.
    Il est possible que ce ne soit pas possible sur certains systèmes un peu lourdingues comme VMS. Mais sur les systèmes actuels (MS-DOS/Windows, Mac, unixoïdes), le mode binaire est universel.

    Voici ce que dit le Rationale :
    7.19.2 Streams

    10 Transparency. Some programs require access to external data without modification. For
    instance, transformation of CR-LF to a newline character is usually not desirable when
    object code is processed. The Standard defines two stream types, text and binary, to
    allow a program to define, when a file is opened, whether the preservation of its exact
    contents or of its line structure is more important in an environment which cannot
    accurately reflect both.
    Pas de Wi-Fi à la maison : CPL

  6. #26
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    C'est imprévisible si on a pas la doc,
    C'est imprévisible du point de vue du programme portable (ou qui se veut portable), et qui n'est pas conçu sur, ni spécialement pour, telle ou telle machine.

    Citation Envoyé par Emmanuel Delahaye Voir le message
    sinon, c'est la seule façon de lire n'importe quel fichier et tu le sais très bien vilain troll...
    Si tu ça te fais plaisir, ok, tu n'as qu'à penser que je trolle.

  7. #27
    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 corrector Voir le message
    C'est imprévisible du point de vue du programme portable (ou qui se veut portable), et qui n'est pas conçu sur, ni spécialement pour, telle ou telle machine.
    Ce qui n'est pas portable, c'est l'interprétation des données, mais la lecture d'un fichier en mode binaire donne le même résultat partout[1], c'est certain. Elle est tout ce qu'il y a de portable. C'est même la seule chose qui soit portable en matière de fichier.

    -----------
    [1] sauf peut être en fin de fichier, comme l'indique la norme...
    Pas de Wi-Fi à la maison : CPL

  8. #28
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Un fichier texte est un fichier qui contient des caractères imprimables organisés en lignes. Il n'y a pas de caractère 0 dans un fichier texte.
    Est-ce que tu considères qu'un fichier codé en UTF-16 n'est pas un fichier texte, ou tu parles des caractères, par forcément du type char, après décodage?

  9. #29
    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 corrector Voir le message
    Est-ce que tu considères qu'un fichier codé en UTF-16 n'est pas un fichier texte, ou tu parles des caractères, par forcément du type char, après décodage?
    La norme parle de caractères... Le cas des caractères étendus n'est pas très clair dans mon esprit... D'après C95, il existe un mode texte 'wide' (wchar_t) qui utilise des fonctions spéciales.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    T-o'M = = = 
          1 2 3 4 5 6 7 8 9 10
    Pas de Wi-Fi à la maison : CPL

  10. #30
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    La norme parle de caractères...
    Ça n'est pas absolument clair dans mon esprit non plus.

    Voilà ce que j'ai trouvé :
    Citation Envoyé par N1256
    3.7
    character

    <abstract> member of a set of elements used for the organization, control, or representation of data

    3.7.1
    character

    single-byte character
    <C> bit representation that fits in a byte

    3.7.2
    multibyte character

    sequence of one or more bytes representing a member of the extended character set of either the source or the execution environment
    NOTE The extended character set is a superset of the basic character set.

    3.7.3
    wide character

    bit representation that fits in an object of type wchar_t, capable of representing any character in the current locale
    C'est quoi "<abstract>"?

    C'est la définition 3.7 ou 3.7.1 qu'on doit prendre en compte?

  11. #31
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par Darkfang Voir le message
    Utiliser la fonction strncpy pour copier la chaine dans un chaine temporaire à imprimer:
    char *
    strncpy(char * restrict dst, const char * restrict src, size_t len);

    The strncpy() function copies at most len characters from src into dst.
    If src is less than len characters long, the remainder of dst is filled
    with `\0' characters. Otherwise, dst is not terminated.
    C'est pas plus simple (et plus clair) d'utiliser memcpy?

  12. #32
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par mikysett Voir le message
    La solution que j'ai escaboté
    Je connaissais pas le terme...
    Citation Envoyé par mikysett Voir le message
    mais elle demande une boucle
    Il y a plus simple (et plus efficace).
    Citation Envoyé par mikysett Voir le message
    en imaginant que maPhrase soit une chaine de caracteres assez longue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #define TAILLE_AFFICHAGE 10
     
    for(i = 0 ; i < TAILLE_AFFICHAGE ; i++)
             printf("%c", maPhrase[i]);
    Enfin voilà, j'ai posé la question, je suis fixé car je sais maintenant que cette fonctionnalité n'existe pas, et des alternatives m'ont été proposées...
    Elle existe, mais pas avec printf : il suffit d'utiliser fwrite!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fwrite (maPhrase, 1, TAILLE_AFFICHAGE, stdout);

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

Discussions similaires

  1. [MySQL] Limiter l'affichage d'une Tableau
    Par lordlifen dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/09/2009, 11h23
  2. Limiter la longueur d'une chaine
    Par koyot3 dans le forum ASP.NET
    Réponses: 0
    Dernier message: 23/02/2009, 14h33
  3. affichage d'une chaine de caracteres
    Par roznos dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/07/2008, 11h57
  4. Affichage d'une chaine de caractère
    Par Bidos dans le forum ASP
    Réponses: 4
    Dernier message: 26/05/2008, 09h07
  5. Limiter les affichages d'une requete avec POstgre
    Par jenny50 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 12/01/2006, 16h26

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