2010-04-11 3 views
8

J'ai un char buffer[100] et j'essaie d'utiliser gdb pour lire le contenu de celui-ci à différentes étapes de l'exécution.L'impression gdb n'imprimera pas quelque chose de lisible de mon tableau de char

j'utilise p buffer et je reçois

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

comment puis-je p pour le convertir en un format lisible ???

+3

Assurez-vous qu'il y a des données imprimables (lisibles) dans le tampon? GDB imprime ce qui est présent - pas ce que vous aimeriez être là. Pour le moment, 'strcmp (buffer,"/* ") == 0'. –

+0

hmm, donc je suis définitivement nouveau à ce sujet, et comme un commentaire de côté, pourquoi strcmp (buffer, "/ *") == 0 important? évidemment, il y a beaucoup plus dans ce tampon que juste "/ *" donc il me semble évident que strcmp retournerait 0 ... – sepiroth

+1

C'est le "\ 000" qui représente le "null" qui marque la fin de la chaîne C . Donc, votre tampon, considéré comme contenant une chaîne C, contient vraiment la chaîne "/ *" (c'est ce que Jonathan Leffler obtient avec son équation 'strcmp' - notez que' strcmp' renvoie 0 quand les chaînes sont identiques). –

Répondre

15

x/s buffer doit afficher le contenu du tableau sous la forme d'une chaîne terminée par un caractère nul (ce que je suppose que vous souhaitez).

+0

Ouais, c'est mieux que mon chemin - moins de taper :) –

10

Si vous voulez vous débarrasser de la jonque après l'hypothèse nulle de terminaison (vous ne verrez "/*" pour cette chaîne), vous pouvez utiliser:

p (char*)buffer 

Au moment gdb est l'impression de votre variable en tant tableau, donc il montre tous les 100 caractères; le mouler à char* le fait l'imprimer comme chaîne de caractères.

Questions connexes