OVH Cloud OVH Cloud

utilisation de sprintf

17 réponses
Avatar
Pilatus
Bonjour,
J'ai pris un exemple pour présenter mon problème : j'aimerais que buf
contienne la chaîne 01234567 mais ça ne marche pas, comment faire ?
Int bin[8] ;
char *buf = new char [4];
for (int i = 0; i <= 7; i++){
tab[i] = i ;
cout << tab [i];}
sprintf(buf, "%d", tab);
cout << "\nbuf=" << buf;
delete [ ] buf;
merci pour votre aide

7 réponses

1 2
Avatar
Fabien LE LEZ
On Thu, 18 Dec 2003 15:25:05 +0100, Thomas Abbé
wrote:

std::string buf ("01234567"); // ;-)


on pensait qu'il voulait creer le string de facon dynamique.


Bon, si tu y tiens :

std::auto_ptr<std::string> ptr_buf (new std::string ("01234567"));

--
;-)


Avatar
Fabien LE LEZ
On Thu, 18 Dec 2003 15:15:49 +0100, Fabien LE LEZ
wrote:

Idem pour "new char[]", d'ailleurs...


Désolé, je voulais dire "Idem pour 'char*'"...

--
;-)

Avatar
Michel Michaud
Dans news:, Fabien LE
On Thu, 18 Dec 2003 15:25:05 +0100, Thomas Abbé
wrote:

char* c1 = "01234567";


C'est valable, ça ?


Deprecated.

J'ai toujours un gros doute sur le fonctionnement de

char* c1 = "01234567";
c1[3]= '5';


À tes risques...

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/


Avatar
kanze
Fabien LE LEZ wrote in message
news:...
On Thu, 18 Dec 2003 15:25:05 +0100, Thomas Abbé
wrote:

char* c1 = "01234567";


C'est valable, ça ?


Oui, pour des raisons de compatibilité avec l'ancien.

J'ai toujours un gros doute sur le fonctionnement de

char* c1 = "01234567";
c1[3]= '5';


Comportement indéfini depuis C90. C'était bien défini dans le C de
Kernighan et Richie ; certains compilateurs continuent à le supporter
pour cette raison. Quelque soit le comportement par défaut du
compilateur, il doit y avoir une option pour le changer (comme
-fwritable-strings en g++, par exemple).

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16


Avatar
Samuel Krempp
le Thursday 18 December 2003 14:45, écrivit :

Bonjour,
J'ai pris un exemple pour présenter mon problème : j'aimerais que buf
contienne la chaîne 01234567 mais ça ne marche pas, comment faire ?
Int bin[8] ;
char *buf = new char [4];
for (int i = 0; i <= 7; i++){
tab[i] = i ;
cout << tab [i];}
sprintf(buf, "%d", tab);
cout << "nbuf=" << buf;
delete [ ] buf;
merci pour votre aide


J'arrive probablement un peu tard.. mais bon.

boost::format est là pour jouer le rôle de printf de façon C++ (il y a aussi
une classe sur le site de james kanze).

si tu as installé boost (boost.org), ensuite tu fais :

#include <boost/format.hpp>

...

Int bin[8] ;
std::string buf;
boost::format("%d") fmter;
for (int i = 0; i <= 7; i++){
tab[i] = i ;
cout << tab [i];
fmter % i ;
buf += fmter.str();
}
cout << "nbuf=" << buf << endl;

--
Sam

Avatar
James Kanze
Samuel Krempp writes:

|> le Thursday 18 December 2003 14:45, écrivit :
|> > J'ai pris un exemple pour présenter mon problème :
|> > j'aimerais que buf contienne la chaîne 01234567 mais ça ne
|> > marche pas, comment faire ?

|> > Int bin[8] ;
|> > char *buf = new char [4];
|> > for (int i = 0; i <= 7; i++){
|> > tab[i] = i ;
|> > cout << tab [i];}
|> > sprintf(buf, "%d", tab);
|> > cout << "nbuf=" << buf;
|> > delete [ ] buf;
|> > merci pour votre aide

|> J'arrive probablement un peu tard.. mais bon.
|>
|> boost::format est là pour jouer le rôle de printf de façon
|> C++ (il y a aussi une classe sur le site de james kanze).

Certes, mais... Pour formatter un seul élément avec un %d, les
ostream de la norme font aussi bien l'afaire.

--
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
Avatar
Samuel Krempp
le Friday 23 January 2004 22:00, écrivit :
Certes, mais... Pour formatter un seul élément avec un %d, les
ostream de la norme font aussi bien l'afaire.


c'est clair.
mais je sais pas ce que l'OP avait l'intention de faire en vrai, son exemple
était forcément simplisite.

--
Sam

1 2