Domanda

Questo non funziona:

unsigned char foo;
foo = 0x123;

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

ottengo questo errore:

  

non può convertire il parametro 2 da   'Unsigned char' a 'char'

È stato utile?

Soluzione

Usa printf() stringa di formato s %u:

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

Altri suggerimenti

Prima di andare fuori guardando caratteri senza segno la causa del problema, dare un'occhiata più da vicino a questa linea:

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

Il primo parametro di sprintf è sempre la stringa a cui viene stampato il valore. Quella linea dovrebbe essere simile a:

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

A meno che non si intende printf invece di sprintf.

Dopo aver sistemato questo, è possibile utilizzare% u nella stringa di formato per stampare il valore di un tipo unsigned.

Modifica

snprintf è un po 'più sicuro. Sta allo sviluppatore per garantire la giusta dimensione del buffer viene utilizzato.

Prova questo:

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

Credo che la vostra confuso con le opere sprintf modo. Il primo parametro è un buffer di stringa, il secondo è una stringa di formattazione, e poi le variabili che si desidera trasmettere.

Non si deve usare sprintf come si può facilmente causare un buffer overflow.

Si dovrebbe preferire snprintf (o _snprintf durante la programmazione con la libreria C standard di Microsoft). Se avete assegnato il buffer sullo stack nella funzione locale, si può fare:

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

I dati potranno troncati ma che è sicuramente preferibile traboccare il buffer.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top