OVH Cloud OVH Cloud

différence cout et printf

5 réponses
Avatar
fabrizio
Bonjour,

je cherche à comprendre la différence qui induit le probleme ci-dessous:
void maclasse:function(char *ptr) {
short int offset=4;
printf("Youhou %x\n",*(ptr+offset));
cout << "Youhou " << (*(ptr+offset)) << endl;
}

sortie standard :
----
Youhou 0
Youhou
----

sachant que ptr pointe sur une zone allouée par un:
char* a=(char*)malloc(8);

pourquoi le 'cout' ne m'imprime pas la valeur ?

fabrice

5 réponses

Avatar
Marc Boyer
In article <cp1vfp$7hu$, fabrizio wrote:
Bonjour,

je cherche à comprendre la différence qui induit le probleme ci-dessous:
void maclasse:function(char *ptr) {
short int offset=4;
printf("Youhou %xn",*(ptr+offset));
cout << "Youhou " << (*(ptr+offset)) << endl;
}

sortie standard :
----
Youhou 0
Youhou
----

sachant que ptr pointe sur une zone allouée par un:
char* a=(char*)malloc(8);

pourquoi le 'cout' ne m'imprime pas la valeur ?


Parce que "cout<<" s'adapte au type de ton paramêtre,
ici un char.
Le printf equivalent serait avec de formateur %c et pas %x.

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.

Avatar
korchkidu
fabrizio wrote:

printf("Youhou %xn",*(ptr+offset));
cout << "Youhou " << (*(ptr+offset)) << endl;


Au risque de dire une annerie, je crois que le premier affiche le code
ASCII du caractere en Hexa.
La deuxieme essaie d'afficher le caractere lui-meme.

K.

Avatar
fabrizio
printf("Youhou %xn",*(ptr+offset));
cout << "Youhou " << (*(ptr+offset)) << endl;


Parce que "cout<<" s'adapte au type de ton paramêtre,
ici un char.
Le printf equivalent serait avec de formateur %c et pas %x.


merci.
quels moyens existe-t-il pour changer le format d'impression du cout ?


Avatar
Marc Boyer
In article <cp21bt$8ag$, fabrizio wrote:
printf("Youhou %xn",*(ptr+offset));
cout << "Youhou " << (*(ptr+offset)) << endl;


Parce que "cout<<" s'adapte au type de ton paramêtre,
ici un char.
Le printf equivalent serait avec de formateur %c et pas %x.


merci.
quels moyens existe-t-il pour changer le format d'impression du cout ?


Je ne fais pas ça tous les jours (généralement, le comportement de <<
me conviens).
La première chose à faire, c'est de dire que tu t'intéresses à
la valuer numérique transportée par ton char, et là, un static_cast
vers int (ou short ?) parait approprié, ou une affectation
qui fera la conversion implicite/
Ensuite, il faut afficher l'entier en hexa: un coup de
google: C++ afficher hexa
me donne
cout << hex << i;

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.



Avatar
fabrizio
merci pour ta réponse