2010-04-11 13 views
8

ho un char buffer[100] e sto provando a usare gdb per leggere il contenuto da esso in varie fasi del runtime.stampa gdb non stamperà qualcosa leggibile dal mio array CA

io uso p buffer e ottengo

"/*\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" 

Come faccio ad avere p per convertirlo in un formato leggibile ???

+3

Verificare che nel buffer siano presenti dati stampabili (leggibili)? GDB stampa ciò che è presente, non ciò che vorresti essere lì. Al momento, 'strcmp (buffer,"/* ") == 0'. –

+0

hmm, quindi sono decisamente nuovo in questo, e come commento laterale, perché è strcmp (buffer, "/ *") == 0 importante? ovviamente, c'è molto di più in questo buffer che solo "/ *" quindi mi sembra ovvio che lo strcmp restituisca 0 ... – sepiroth

+1

È il "\ 000" che rappresenta il "nulla" che segna la fine della stringa C . Quindi il tuo buffer, visto come contenere una stringa C, contiene davvero la stringa "/ *" (è ciò che Jonathan Leffler sta ottenendo con la sua equazione 'strcmp' - nota che' strcmp' restituisce 0 quando le stringhe sono le stesse). –

risposta

15

x/s buffer dovrebbe visualizzare il contenuto dell'array come una stringa terminata null (che è quello che presumo che desideri).

+0

Sì, è meglio del mio modo - meno digitando :) –

10

Se si vuole sbarazzarsi della spazzatura, dopo il nulla di terminazione (così ti basta vedere "/*" per questa stringa) è possibile utilizzare:

p (char*)buffer 

Al momento gdb è la stampa la variabile come un array, quindi mostra tutti i 100 caratteri; trasmettendolo a char* lo fa stampare come una stringa C.

Problemi correlati