OVH Cloud OVH Cloud

sprintf avec la classe string (bis)

11 réponses
Avatar
Eric Bart
Juste une ptite info pour rajouter sprintf à la classe string :

//---------------------------------------------------------------------------
string BKsys::StrPrintf(const char *chFormat, ...)
{
va_list args;
va_start(args, chFormat);

// calcul de la taille du buffer
char * buff;
int iBufSize = vsnprintf(buff, 0, chFormat, args);

buff = new char[iBufSize +2];
vsnprintf(buff, iBufSize +1, chFormat, args);

va_end(args);
string sS = buff;
delete [] buff;
return sS;
}
//---------------------------------------------------------------------------

Ca s'utilise comme ça :

int i=11;
string sToto = BKsys::StrPrintf("La valeur hexa de %d est %#X\n",i,i):

Ca vous plait ?

1 réponse

1 2
Avatar
James Kanze
"Eric Bart" writes:

|> > Il faudrait aussi comprendre ce qu'il entend par « mal
|> > équipée ». Je ne crois pas qu'il soit interdit
|> > d'écrire des fonctions libres qui fait ce qu'on veut.

|> Est-ce qu'il est possible de modifier la classe string sans changer
|> les sources systèmes ? Si pour rajouter une fonction à la
|> classe string je suis obligé d'éditer les sources standards,
|> alors je ne pourrai pas par exemple, distribuer mes sources. Il
|> faudra que je prévienne de modifier la classe string. Pas très
|> pratique.

Mais pourquoi veux-tu ajouter une fonction à la classe std::string ?
À mon avis, elle en a déjà trop.

À la fin, std::string doit être vue comme un type de base, comme
double ou int. Les opérations de base, c'est l'affectation, ou
d'autres choses qui permet d'obtenir des nouvelles valeurs -- à cette
égard, des fonctions comme replace ou substr correspond à peu de
choses près aux opérateurs de base sur int. (Ce serait plus vrai,
évidemment, si ces fonctions renvoyaient une nouvelle valeur,
plutôt que modifiaient la valeur existante. Je considère ça une
erreur dans la conception de std::string.)

Quand au manipluations plus complexe : j'ai bien besoin d'une fonction
libre pour calculer le sinus d'un double -- pourquoi en serait-il
autrement pour le rembourrage d'une chaîne de caractères ?

|> Je peux bien sûr rajouter les sources de boost à mon projet.
|> M'enfin tout dépend de la confiance que j'accorde à boost.
|> Est-ce que boost se compile sur tout ?

Loin de ça. C'est la raison principale pourquoi je ne m'en sers pas
encore.

|> durera t-il ?

Il y a de fortes chances.

|> Est-ce qu'une librairie standard ne remplacera boost d'ici peu,
|> rendant mon programme illisible dans quelques années.

J'ai l'impression que la plupart des bibliothèques qu'on va ajouter
à la norme viennent directement de Boost.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
1 2