2010-04-11 85 views
8

我有一個char buffer[100]我試圖在運行時的各個階段使用gdb讀取它的內容。GDB的打印不會打印出我的字符數組可讀的東西

我使用p buffer,我也得到

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

我如何得到p將其轉換爲可讀的格式???

+3

確保緩衝區中有可打印的(可讀的)數據? GDB打印出現的內容 - 不是你想要在那裏。目前,'strcmp(buffer,「/ *」)== 0'。 – 2010-04-11 00:40:33

+0

嗯,所以我肯定是在這個新的,作爲一方評論,爲什麼strcmp(緩衝區,「/ *」)== 0重要?顯然,在這個緩衝區中的方式不僅僅是「/ *」,所以對我來說strcmp會返回0 ... – sepiroth 2010-04-11 00:44:16

+1

這是表示「Null」的「\」,它表示C字符串的末尾。所以你的緩衝區被看作是持有一個C字符串,確實包含字符串「/ *」(這就是Jonathan Leffler用他的'strcmp'公式得出的結果 - 注意當字符串相同時'strcmp'返回0)。 – 2010-04-11 00:49:11

回答

15

x/s buffer應顯示數組的內容爲空字符串(這是我想你會喜歡的)。

+0

是的,這比我的方式更好 - 少打字:) – 2010-04-11 00:45:26

10

如果你想終止空後襬脫垃圾的(所以你剛纔看到"/*"該字符串),可以使用:

p (char*)buffer 

目前gdb正在打印您的變量作爲數組,所以它顯示全部100個字符;將其轉換爲char*可以將其打印爲C字符串。