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 :

Notation printf "%12.12s"


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Par défaut Notation printf "%12.12s"
    Bonjour,
    Je travaille sur l'évolution d'une application qui appelle des exécutables codés en C, et je dois les transcoder en java. (Je ne suis pas développeur C)

    Dans le code cette notation me perturbe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(wrk_enreg, "%12.12s",  monTableauDeChar )
    Je ne comprend pas na nuance entre "%12s" et "%12.12s". Pour un float le ".12" signifierait 12 chiffres après la virgule, mais que signifie-t-il pour une chaine de char?
    Je ne trouve rien ni dans la page man de sprintf, ni ailleur...

    Merci de vos réponses.

  2. #2
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 785
    Par défaut
    Hello,

    Rien de mieux que tester
    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>
     
    int main(void) {
    	char *str="Hello world";
     
    	printf("|%s|\n",str);
    	printf("|%5s|\n",str);
    	printf("|%.5s|\n",str);
    	printf("|%3.5s|\n",str);
    	printf("|%-25s|\n",str);
    	printf("|%5.5s|\n",str);
    	printf("|%25.5s|\n",str);
    	printf("|%-25.5s|\n",str);
     
    	return(0);
    }
    et d'aller voir ici (section .precision, entre autre, on y parle du %s)

  3. #3
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Par défaut
    OK:
    J'étais allé sur cette page, mais je n'avais pas vu ça:
    For s: this is the maximum number of characters to be printed. By default all characters are printed until the ending null character is encountered.
    Ca permet de limiter la longueur du résultat pour les chaines.

    Merci pour vos réponses à tous les deux

  4. #4
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 785
    Par défaut
    C'est ce qui permet de dessiner un cerf-volant en rendant fous les débutants:
    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
    #include <stdio.h>
     
    #define SIZE 25		// can be changed, but must be greater than 0 (not tested in code)
     
    void drawKite(int midsize) {
    	int i;
     
    	// draw upper part
    	for(i=0;i<midsize;i++)
    		printf("%*.*s/%*.*s|%*.*s\\\n",midsize-i-1,midsize-i-1,"",i,i,"",i,i,"");
    	// draw center line
    	for(i=0;i<=midsize*2;i++) 
    		if(i!=midsize) putchar('-');
    		else putchar('+');
    	puts("");
    	// draw lower part
    	for(i=0;i<midsize;i++)
    		printf("%*.*s\\%*.*s|%*.*s/\n",i,i,"",midsize-i-1,midsize-i-1,"",midsize-i-1,midsize-i-1,"");
    }
     
    int main(void) {
    	drawKite(SIZE);
    	return(0);
    }

  5. #5
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Pour les chaînes de caractères, le format %12.12s se lit comme ça:

    - Le premier 12 donne la longueur minimale de la chaîne à afficher, des espaces sont ajoutés (à gauche car on n'a pas mis %-12.12s) pour combler le vide si la chaîne à afficher est trop courte (padding).

    - Le deuxième 12 donne la longueur maximale à afficher, si la chaîne est plus longue, elle sera tronquée.

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

Discussions similaires

  1. Quote et double quote
    Par aktos dans le forum Langage
    Réponses: 8
    Dernier message: 05/01/2007, 19h55

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