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 :

fonction printf


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 5
    Par défaut fonction printf
    bonjour,

    est-ce que quelqu'un pourrait me dire où je pourrais trouver le code de la fonction printf :
    je dois coder une fonction analogue et celà me faciliterai énormément la vie

    merci

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 35
    Par défaut
    printf c'est dans stdio.h ... edite ce fichier et tu auras le code ...

  3. #3
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 137
    Par défaut
    le seul problème est que ces fonctions sont en assembleur, optimisées à fond et que les fichiers .h fournis avec les compilateurs sont plutôt illisibles.
    d'ailleurs, ces fonctions sont précompilées en général

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 5
    Par défaut
    donc si je comprends bien, il va falloir que je me rapaluche à la main toute la fonction

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 14
    Par défaut
    Tu a besoin de koi exactement par rapport a la fonction printf ?

    => le fait d'avoir une liste variable de param (list args ??? je crois)
    => le fait d'envoyer une chaine de caractère formatté (selon différents type de données) sur stdout
    ?
    :

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 5
    Par défaut
    bon, je vais essayer d'être clair (c'est assez capilotracté !!)

    il faut que j'écrive un simulateur d'un micro qui est programmé en C.
    dans le code du programme que je dois simuler, il y a des printf qui affichent des messages sur un écran (logique)

    les printfs permettent d'utiliser aussi des caractères de controles (\n \t...) et des remplaçements de variables (%d %c...)

    ce que je veux faire, c'est récupérer la chaine de caractères générée par le printf, sans qu'il ait interprété les caractères de controles...

    un exemple sera plus simple je pense

    j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    i = 15;
    printf("\ni = %d\n", i);
    je veux récupérer comme chaine dans une variable
    voila, le problème.

    pour le résoudre je pense à la solution suivante

    - dérouter systématiquement le printf vers une autre fonction par un define
    #define printf PRINTF
    - dans ce PRINTF, transformer la chaine à formatter "\ni = %d\n" en "\\ni = %d\\n"
    - exécuter un fprintf vers un fichier avec la nouvelle chaine formatté
    - récupérer la chaine dans le fichier
    - et virer les éventuels \\ (je ne sais pas s'ils seront doublés à l'écriture ??)

    je pense que c'est bien compliqué, mais pour l'instant je n'ai rien d'autre...
    donc si vous avez des idées, elles sont les bienvenues.
    merci

  7. #7
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    J'ai deja fait un truc dans le genre...


    voila ce que je te propose:

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    #include <stdio.h>	// pour printf()
    #include <ctype.h>	// pour iscntrl()
    #include <stdarg.h>	// pour va_start(), va_end(), va_list ,...
     
    /*----------------------------------------------*/
    /* Effectue un printf normal sur stdout		*/
    /* puis recopie la chaine dans le fichier en	*/
    /* parametre (sans les caracteres de controle)	*/
    /*----------------------------------------------*/
    int myPrintf (FILE* output, char *format ,...)
    {
    	va_list	liste;
    	char	*new_format;
    	int i,j;
    	int size;
     
    	size = strlen(format);
    	// On compte le nombre de caractere de controle
    	for (size=0, i=size; i>=0; i--)
    		if (iscntrl(format[i]))
    			size++;
    	size +1; // '\0'
     
    	// On alloue le nouveau format
    	new_format = (char*) malloc (sizeof(char) * size);
     
    	// On recopie la chaine en modifiant les controles
    	for (i=0, j=0; i<strlen(format); i++,j++)
    	{
    		switch (format[i])
    		{
    		case '\n':
    			new_format[j++] = '\\';
    			new_format[j] = 'n';
    			break;
    		case '\t':
    			new_format[j++] = '\\';
    			new_format[j] = 't';
    			break;
    		/* etc... pour les autres controles */
     
    		default: /* ici on gere tous les autres caracteres */
    			new_format[j] = format[i];
    		}
    	}
    	new_format[j] = '\0';
     
    	// On alloue la chaine qui contiendra le resultat
    	size = strlen(new_format)+1;
     
     
    	va_start(liste,format); // on charge la liste d'arguments
     
    	/*- on ecrit dans le fichier avec la nouvelle chaine -*/
    	vfprintf (output, new_format, liste);
     
    	/*- on ecrit sur stdout avec la chaine normal -*/
    	size = vprintf (format, liste);
     
    	va_end(liste);	// on referme la liste d'arguments
     
    	free (new_format);
    	return size;
    }
     
    main ()
    {
    	myPrintf (stdout, "\ni = %d\n", 15);
    }

    normalement ca devrait marcher

    Si tu as du mal avec le C hésite pas à lire les tutoriels et cours de formation pour apprendre la programmation en langage C : http://c.developpez.com/cours/

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2002
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 5
    Par défaut
    super je te remercie
    le code que tu m'as donné est exactement ce dont j'avais besoin

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

Discussions similaires

  1. Modifier la fonction printf de bcb
    Par yozart dans le forum C++Builder
    Réponses: 0
    Dernier message: 24/10/2008, 11h45
  2. la fonction printf démystifiée
    Par saad.hessane dans le forum C
    Réponses: 22
    Dernier message: 10/07/2008, 14h22
  3. [MASM32] Comment utiliser la fonction printf
    Par _Michel dans le forum x86 32-bits / 64-bits
    Réponses: 26
    Dernier message: 08/11/2007, 11h09
  4. Fonction printf personnalisee
    Par Bob dans le forum C
    Réponses: 2
    Dernier message: 20/12/2003, 22h20

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