Bonjour,
J'aimerais pouvoir rapidement convertir une chaine "toto" sur 20 caractères par exemple.
Je sais le faire pour un nombre avec sprintf et les %20d ou %20f mais j'aurais tendance à faire un truc bien compliqué pour une chaine...
Merci.
Bonjour,
J'aimerais pouvoir rapidement convertir une chaine "toto" sur 20 caractères par exemple.
Je sais le faire pour un nombre avec sprintf et les %20d ou %20f mais j'aurais tendance à faire un truc bien compliqué pour une chaine...
Merci.
salut,
si tu sais le faire avec sprintf tu sais aussi le faire avec une CString (fonction format ) voir faq.
Ce qui est affirmé sans preuve peut être nié sans preuve Euclide.
Les conversions numériques en C,C++,C++/CLI
DLL d'extensions : écriture d'un plug-in de classe
Démarrer avec les MFC 2/2
Création d'un ActiveX MFC
Intégration d'une imprimante PDF pour éditions automatisées
Migrer du code de Visual C++ 6.0 vers Visual C++ 2005
Démarrer avec les MFC sous Visual C++1/2
la Faq Visual C++ 500 Q/R,Mon blog
Aide en Ligne MFC
Cours et tutoriels C++ - FAQ C++ - Forum C++.
Le problème c'est qu'en entrée, j'ai un char* et pareil en sortie.
Passer par CString va m'obliger à faire plusieurs conversions et j'ai besoin d'être rapide car il y a plusieurs chaines à formater.
ça suffit ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 sprintf(sz,"%20s","toto");
Ce qui est affirmé sans preuve peut être nié sans preuve Euclide.
Les conversions numériques en C,C++,C++/CLI
DLL d'extensions : écriture d'un plug-in de classe
Démarrer avec les MFC 2/2
Création d'un ActiveX MFC
Intégration d'une imprimante PDF pour éditions automatisées
Migrer du code de Visual C++ 6.0 vers Visual C++ 2005
Démarrer avec les MFC sous Visual C++1/2
la Faq Visual C++ 500 Q/R,Mon blog
Aide en Ligne MFC
Cours et tutoriels C++ - FAQ C++ - Forum C++.
Le problème, c'est que "%20s" n'a pas le même comportement partout.
Je ne sais pas quel comportement est standard, mais certaines implémentations considèrent 20 comme une longueur minimale, d'autres comme une taille maximale...
Pour moi, la méthode memcpy est la plus sûre:
Et bien sûr, tu peux en faire une fonction:
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 char buf[20+1]; size_t len = strlen(chn); len = min(len,20); //Copie sans le \0 memcpy(buf, chaine, len*sizeof(buf[0])); for(size_t i=len ; i<20 ; i++) buf[i] = ' '; buf[20] = '\0';
Voire même un template:
Code C : Sélectionner tout - Visualiser dans une fenêtre à part void StrCpyEx(char *buf, size_t taille, char const *chaine, char padding);
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 template< size_t N > void StrCpyExT(char (&buf)[N], char const *chaine, char padding) { StrCpyEx(buf, N, chaine, padding); }
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Partager