2013-01-01 39 views
2

我有一些c代碼來連接一個字符串。問題調試c字符串?

char str_cat[strlen(str1) + strlen(str2) + 1]; 

如何檢查gdb中的sizeof str_cat?現在它報告0與:

print sizeof(str_cat) 

它可以打印字符串,但我怎麼打印出空字符?

讓我reword,我如何驗證str_cat是合適的大小,並有足夠的空間?

+1

隱含終止NUL。它不會自動打印它。如果你想得不好,你可以用'整數'打印'theString [strlen(theString)]'。它應該是'0'。 – 2013-01-01 22:43:03

+0

它不會顯示空字符,因爲空字符看起來不像任何東西。 str_cat是一個函數嗎?它不應該是char *,在這種情況下,sizeof將無法工作,因爲它只會返回指針的大小? –

+0

@Ben'str_cat'是一個'char'數組。如果調試器知道它是一個數組,那麼它將正確顯示大小。 – 2013-01-01 22:46:29

回答

4

char str_cat [strlen(str1)+ strlen(str2)+ 1];

如何檢查gdb中的sizeof str_cat?現在它報告0:

str_cat是一個可變長度數組。顯然gdb不怎麼處理變長數組。

有關於這個問題的公開售票這裏: http://sourceware.org/bugzilla/show_bug.cgi?id=9663

它提到的現有修補程序,但至少我2012版本的gdb7.4不包括它。

0

要解決辦法在GDB錯誤,尺寸存儲在一個單獨的變量第一,商店的大小在一個單獨的變量之後,例如:

int len = strlen(str1) + strlen(str2) + 1; 
char str_cat[len]; 

char str_cat[strlen(str1) + strlen(str2) + 1; 
size_t len = sizeof str_cat; 

然後在GDB中打印len