Question

Cela ne fonctionne pas:

unsigned char foo;
foo = 0x123;

sprintf("the unsigned value is:%c",foo);

J'obtiens cette erreur:

Impossible de convertir le paramètre 2 de «char non signé» en «char»

Était-ce utile?

La solution

Utilisation printf() Formta String's %u:

printf("%u", 'c');

Autres conseils

Avant de partir en regardant des caractères non signés causant le problème, examinez de plus près cette ligne:

sprintf("the unsigned value is:%c",foo);

Le premier argument de Sprintf est toujours la chaîne à laquelle la valeur sera imprimée. Cette ligne devrait ressembler à quelque chose:

sprintf(str, "the unsigned value is:%c",foo);

À moins que vous ne vouliez dire printf au lieu de sprintf.

Après avoir corrigé cela, vous pouvez utiliser% u dans votre chaîne de format pour imprimer la valeur d'un type non signé.

ÉDITER

snprintf est un peu plus sûr. Il appartient au développeur de s'assurer que la bonne taille de tampon est utilisée.

Essaye ça :

char p[255]; // example
unsigned char *foo;
...
foo[0] = 0x123;
...
snprintf(p, sizeof(p), " 0x%X ", (unsigned char)foo[0]);

Je pense que tu es confondu avec le chemin sprintf œuvres. Le premier paramètre est un tampon de chaîne, le second est une chaîne de formatage, puis les variables que vous souhaitez sortir.

Vous ne devez pas utiliser Sprintf car il peut facilement provoquer un débordement de tampon.

Vous devez préférer snprintf (ou _snprintf lors de la programmation avec la bibliothèque Microsoft Standard C). Si vous avez alloué le tampon sur la pile dans la fonction locale, vous pouvez faire:

char buffer[SIZE];
snprintf(buffer, sizeof(buffer), "...fmt string...", parameters);

Les données peuvent être tronquées, mais cela est définitivement préférable pour déborder le tampon.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top