2010-04-11 3 views
8

tengo un char buffer[100] y estoy tratando de usar gdb para leer los contenidos en varias etapas del tiempo de ejecución.gdb print no imprimirá algo legible desde mi matriz de caracteres

yo uso p buffer y me sale

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

¿Cómo llego p para convertirlo en un formato legible ???

+3

Asegúrese de que haya datos imprimibles (legibles) en el búfer? GDB imprime lo que está presente, no lo que le gustaría estar allí. En este momento, 'strcmp (buffer,"/* ") == 0'. –

+0

hmm, así que definitivamente soy nuevo en esto, y como comentario adicional, ¿por qué strcmp (buffer, "/ *") == 0 es importante? Obviamente, hay mucho más en este buffer que solo "/ *" así que me parece obvio que strcmp devolvería 0 ... – sepiroth

+1

Es el "\ 000" que representa el "nulo" que marca el final de la cadena C . Así que su búfer, visto como sosteniendo una cadena C, realmente contiene la cadena "/ *" (eso es lo que Jonathan Leffler está obteniendo con su ecuación 'strcmp'; tenga en cuenta que' strcmp' devuelve 0 cuando las cadenas son las mismas). –

Respuesta

15

x/s buffer debe mostrar el contenido de la matriz como una cadena con terminación nula (que es lo que supongo que le gustaría).

+0

Sí, eso es mejor que mi manera, menos tipeo :) –

10

Si desea deshacerse de la basura después de la terminación nulo (por lo que sólo ve "/*" para esta cadena) que puede utilizar:

p (char*)buffer 

Por el momento gdb está imprimiendo la variable como una array, por lo que muestra los 100 caracteres; lanzándolo a char* lo imprime como una cadena en C.

Cuestiones relacionadas