2010-04-11 5 views
8

Mam char buffer[100] i próbuję użyć gdb do odczytania zawartości z niego na różnych etapach środowiska wykonawczego.Wydruk gdb nie wypisze czegoś czytelnego z mojego zestawu znaków

używam p buffer i dostaję

"/*\000\000\000\000\000\000????X?o\000\025\202\004\b", '\0' <repeats 12 times>, ".N=?", '\0' <repeats 24 times>, "`\203\004\b\000\000\000\000L\227\004\bX????\202\004\b?\017\204\000\f?\203\000\210???i\205\004\b??r" 

jak mogę dostać p aby przekształcić go w formacie czytelnym ???

+3

Upewnij się, że w buforze są dane do wydrukowania (odczyt)? GDB drukuje to, co jest obecne - nie to, co chciałbyś tam być. W tej chwili 'strcmp (buffer,"/* ") == 0'. –

+0

hmm, więc jestem zdecydowanie nowy, a jako komentarz boczny, dlaczego strcmp (bufor, "/ *") == 0 ważne? oczywiście, w buforze jest znacznie więcej niż "/ *", więc wydaje mi się oczywiste, że strcmp zwróci 0 ... – sepiroth

+1

To "\ 000" reprezentuje "zero", które oznacza koniec ciągu C . Zatem twój bufor, postrzegany jako trzymający ciąg C, naprawdę zawiera ciąg "/ *" (to jest to, do czego Jonathan Leffler dołącza ze swoim równaniem "strcmp" - zauważ, że 'strcmp' zwraca 0, gdy łańcuchy są takie same). –

Odpowiedz

15

x/s buffer powinien wyświetlać zawartość tablicy jako zakończony znakiem NUL ciąg (który jest, jak zakładam, że chcesz).

+0

Tak, to jest lepsze niż moja droga - mniej pisania :) –

10

Jeśli chcesz pozbyć się śmieci po null obciążeniowym (więc po prostu zobaczyć "/*" dla tego łańcucha) można użyć:

p (char*)buffer 

Obecnie gdb drukuje zmienną jako tablica, więc pokazuje wszystkie 100 znaków; przesłanie go do numeru char* powoduje, że zostanie wydrukowany jako ciąg znaków C.