Taille de printf

martin -  
 martin -
Salut,
j'ai une question facile ET chiante en C++ :
Comment connaitre la taille que va necesiter un printf ( ou sprintf ou fprintf )
Je sais que ces fonctions renvoient déjà la taille de la chaine crée mais je ne veux pas avoir besoin d'ecrire dans la sortie standart ( ou dans un buffer ou un fichier ) pour la connaitre.
Est-ce que quelqu'un connait une fonction du genre

unsigned int quedalle_printf ( const char* format, ... )

qui ferait ça ?

Merci

P.S.
j'ai essayé
unsigned int i = sprintf( NULL , "blabla %s %i" , "azerty" , 45 );
en espérant - naïvement - qu'avec un pointeur sur buffer NULL la fonction se contentait de renvoyer gentiment la taille sans essayer d'écrire dans le buffer... mais surprise : non

1 réponse

Bob
 
Un "sizeof(chaine)" ça te suffit pas à moins que tu as fait un "malloc()" dans ce cas tu l'as déjà fixé la taille.
0
martin
 
non, parce que, en fait, si je fait un :

sprintf ( buffer , "salut %s, tu as %i ans", nom, age );

je voudrais connaitre la taille exacte qui va être écrite dans le buffer et j'ai pas envie d'en déclarer un avec une taille fixe comma ça :

char buffer [ 1024 ] ; // ça j'en veux pas
sprintf ( buffer , "salut %s, tu as %i ans", nom, age );
// tout ça pour faire ça :
char *c = new char [ strlen ( buffer ) +1 ] ;
memcpy (c, buffer, strlen( buffer ) +1 );
// et retourner mon pointeur sur char pour l'utiliser ailleurs
return c;

ce que je cherche a obtenir c'est ça :

unsigned int l = calcul_taille_de_printf ( "salut %s, tu as %i ans", nom, age );
char *c = new char [ l ]; // ou = char[ l+1 ] si la fonction ne compte pas le zero final
sprintf ( c , "salut %s, tu as %i ans", nom, age );
// comme ça c'est propre et la taille peut être énorme je ne gacherais pas de la mémoire avec un gros buffer qui sert juste de transition à une copie
return c;

il doit bien avoir une #@¤$ de fonction dans <stdio.h> qui permette de savoir la taille d'une chaine formatée AVANT de la formater dans un buffer, un fichier ou de la sortir dans stdout

merci quand même de ton aide
0