2013-08-22 13 views
5

Qual è l'utilizzo del flusso di caratteri non firmato.Per stampare il valore all'interno di un puntatore di un carattere senza segno

Se si dispone di un flusso di caratteri senza segno come sotto, come posso stampare i valori all'interno di quel flusso.

Per un flusso o una stringa di carattere normale, posso stamparlo utilizzando% s, ma che dire di questo.

Grazie in anticipo.

unsigned char *ptr ="(some value)" 
+1

Hai provato '% s'? –

+0

'% s' funzionerà correttamente. Inoltre, in generale 'char' può o non può essere' firmato'. – Keith

+0

@Keith e KarthikT non sono un comportamento non definito di tipo non corrispondente e identificatore di conversione? –

risposta

7

Quando si tratta di gestione di stringhe, non v'è alcuna differenza notevole tra il unsigned char e pianura char. Quest'ultimo può essere firmato o non firmato, è definito dall'implementazione. Tuttavia, tutte le tabelle dei simboli hanno sempre un indice positivo. Pertanto, quando hai a che fare con stringhe, puoi sempre trasmettere in modo sicuro tra unsigned char e char. (Il cast di un puntatore tra i due tipi è un comportamento formalmente mal definito dallo standard, ma in realtà funzionerà sempre su qualsiasi sistema mai realizzato.)

Pertanto, printf("%s", ptr); funzionerà correttamente.

3

Un array di char senza segno di solito rappresenta i dati di byte non elaborati e se si desidera esportarli come una stringa utilizzando %s, si otterranno probabilmente caratteri senza senso, che non avranno alcun significato per voi. Se davvero vuoi vedere i valori, allora consiglio la conversione di un singolo byte su short e poi lo invii con un %i.

Solo la mia opinione.

+1

Concordato. Dovresti pensare al futuro utilizzo del tuo char ptr unsigned: lo userai con normali stringhe C, o con byte "raw memory"? Pianificare in anticipo e utilizzare il tipo corretto garantisce che il compilatore possa rilevare una classe di possibili errori. – usr2564301

+0

Se so che è usato come dati di byte, allora uso% x. – Jess

Problemi correlati