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

10 réponses

1 2
Avatar
Christophe de VIENNE
Pilatus wrote:
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 ?


La solution la plus simple est la suivante :

#include <sstream>

...

{
std::ostringstream o;
for(int i = 0; i <= 7; ++i)
o << i;
// ou bien o << tab[i] si tes chiffres sont stockés
// dans ton tableau
std::cout << o.str();
}

Sinon :

Int bin[8] ;


Tu veux dire "int tab[8];" j'imagine ?

char *buf = new char [4];


tu alloues une chaine de 4 caractères pour en écrire 7... c'est plutot
risqué...

for (int i = 0; i <= 7; i++){
tab[i] = i ;
cout << tab [i];}
sprintf(buf, "%d", tab);


là tu dis à sprintf que tab est un int, or c'est un int*. Tu ne peux pas
lui dire de parcourir tab de toutes façons.

cout << "nbuf=" << buf;
delete [ ] buf;
merci pour votre aide



de rien. Mais ton but réel n'est pas très clair. De plus sprintf c'est
plutôt en C qu'on l'utilise, et ce n'est pas très sûr.

A+

Christophe

Avatar
Raphael TOSTO
"Pilatus" a écrit dans le message de
news:
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




En reprenant ton exemple, et en ne modifiant que ce qui est nécessaire au
fonctionnement cela donnerait :

int tab [8] ;
char *buf = new char [8+1] ;

for ( int i=0 ; i<=7 ; i++)
{
tab [i] = i ;
cout << tab [i] ;
}

sprintf ( buf, "%d%d%d%d%d%d%d%d", tab [0], tab [1], tab [2], tab [3], tab
[4], tab [5], tab [6], tab [7], )

buf [8] = 0 ;
cout << "nbuf=" << buf
delete [] buf ;

Avatar
Thomas Abbé
dabord:
quest ce qui est tab?
je pense que c un tableau?

sprintf ecris des donnees formatees dans un string.
dans ce cas, tu en as pas besoin.

string s;
for (i = 0; i < 8; i++)
s += '0' + i;

ou

char buf[8];
for (i = 0; i < 8; i++)
buf[i] = '0'+i;

ou


char buf[8];
char temp[8];
for (...)
{
sptintf(temp, "%d", i);
strcat(buf, temp);
}

...
et et et...

Thomas




"Pilatus" schrieb:
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




Avatar
Christophe
bonjour

"Pilatus" a écrit dans le message de
news:
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




est ce que tab[] est initialisé ?
a+

Avatar
Fabien LE LEZ
On Thu, 18 Dec 2003 14:57:05 +0100, Christophe de VIENNE
wrote:

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 ?


La solution la plus simple est la suivante :


Non, la solution la plus simple est :

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

De plus sprintf c'est
plutôt en C qu'on l'utilise


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

--
;-)


Avatar
Christophe de VIENNE
Fabien LE LEZ wrote:
On Thu, 18 Dec 2003 14:57:05 +0100, Christophe de VIENNE
De plus sprintf c'est
plutôt en C qu'on l'utilise



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



Je te met au défi de compiler en C :
int main() {
char * tab = new char[7];
};

:-)

A+

Christophe


Avatar
Thomas Abbé
"Fabien LE LEZ" schrieb:
On Thu, 18 Dec 2003 14:57:05 +0100, Christophe de VIENNE
wrote:

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 ?


La solution la plus simple est la suivante :


Non, la solution la plus simple est :

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


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

De plus sprintf c'est
plutôt en C qu'on l'utilise


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



char* c1 = "01234567";
char* c2 = new char[256];

strcpy(c2, c1);
strcpy(c2, "01234567");

Thomas



Avatar
Pilatus
"Raphael TOSTO" a écrit dans le message news:
brsbpr$7g5$

"Pilatus" a écrit dans le message de
news:
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




En reprenant ton exemple, et en ne modifiant que ce qui est nécessaire au
fonctionnement cela donnerait :

int tab [8] ;
char *buf = new char [8+1] ;

for ( int i=0 ; i<=7 ; i++)
{
tab [i] = i ;
cout << tab [i] ;
}

sprintf ( buf, "%d%d%d%d%d%d%d%d", tab [0], tab [1], tab [2], tab [3], tab
[4], tab [5], tab [6], tab [7], )

buf [8] = 0 ;
cout << "nbuf=" << buf
delete [] buf ;


merci à tous pour votre aide, vous me parlez de chose que je n'ai pas encore
decouvert
mais pour l'instant la solution de Raphael TOSTO me convient

merci à bientôt


Avatar
Thomas Abbé
sprintf ( buf, "%d%d%d%d%d%d%d%d", tab [0], tab [1], tab [2], tab [3],
tab


[4], tab [5], tab [6], tab [7], )

buf [8] = 0 ;
cout << "nbuf=" << buf
delete [] buf ;


merci à tous pour votre aide, vous me parlez de chose que je n'ai pas
encore

decouvert
mais pour l'instant la solution de Raphael TOSTO me convient


euh...
oui, cette solution fait ce quelle doit faire, mais si tu continue a
programmer comme ca, l'invention des boucles n'etait pas necessaire ;)

Thomas


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

char* c1 = "01234567";


C'est valable, ça ?
J'ai toujours un gros doute sur le fonctionnement de

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

--
;-)

1 2