2013-08-22 8 views
5

Co to jest użycie niepodpisanego strumienia char.Aby wydrukować wartość wewnątrz wskaźnika Unsigned character

Jeśli mam niepodpisany strumień znaków jak poniżej, w jaki sposób mogę wydrukować wartości w tym strumieniu.

Dla zwykłego strumienia lub ciągu znaków można go wydrukować za pomocą% s, ale co z tego.

Z góry dziękuję.

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

Czy próbowałeś '% s'? –

+0

'% s' będzie działać poprawnie. Ponadto, ogólnie "char" może, ale nie musi być "signed". – Keith

+0

@Keith and KarthikT nie jest niedopasowanym typem niezgodności i specyfikatorem konwersji? –

Odpowiedz

7

Jeśli chodzi o obsługę łańcuchów, nie ma zauważalnej różnicy pomiędzy unsigned char i zwykłego char. Ten ostatni może być podpisany lub niepodpisany, jest definiowany przez implementację. Jednak wszystkie tabele symboli zawsze mają indeks dodatni. Więc kiedy masz do czynienia z ciągami, możesz zawsze bezpiecznie rzucić między unsigned char i char. (Wskaźnik rzucany pomiędzy tymi dwoma typami jest formalnie słabo zdefiniowanym zachowaniem standardu, ale w rzeczywistości zawsze będzie działał na każdym systemie kiedykolwiek utworzonym.)

W ten sposób printf("%s", ptr); będzie działał poprawnie.

3

Niepodpisana tablica znaków zwykle reprezentuje surowe dane bajtowe i jeśli chcesz wyprowadzić ją jako ciąg znaków za pomocą %s, prawdopodobnie dostaniesz bełkotliwe znaki, które nie mają dla ciebie znaczenia. Jeśli naprawdę chcesz zobaczyć wartości, to zalecam konwersję pojedynczego bajtu na short, a następnie wypisz go przy pomocy %i.

Po prostu moja opinia.

+1

Zgoda. Powinieneś pomyśleć o przyszłym użyciu niepodpisanego char ptr - czy użyjesz go ze zwykłymi C-stringami, czy z bajtami "raw memory"? Planowanie z wyprzedzeniem i stosowanie właściwego typu zapewnia kompilatorowi możliwość złapania klasy możliwych błędów. – usr2564301

+0

Jeśli wiem, że jest używany jako dane bajtowe, używam% x. – Jess

Powiązane problemy