我有一些c代碼來連接一個字符串。問題調試c字符串?
char str_cat[strlen(str1) + strlen(str2) + 1];
如何檢查gdb中的sizeof str_cat?現在它報告0與:
print sizeof(str_cat)
它可以打印字符串,但我怎麼打印出空字符?
讓我reword,我如何驗證str_cat是合適的大小,並有足夠的空間?
我有一些c代碼來連接一個字符串。問題調試c字符串?
char str_cat[strlen(str1) + strlen(str2) + 1];
如何檢查gdb中的sizeof str_cat?現在它報告0與:
print sizeof(str_cat)
它可以打印字符串,但我怎麼打印出空字符?
讓我reword,我如何驗證str_cat是合適的大小,並有足夠的空間?
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
版本的gdb
7.4
不包括它。
要解決辦法在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
。
隱含終止NUL。它不會自動打印它。如果你想得不好,你可以用'整數'打印'theString [strlen(theString)]'。它應該是'0'。 – 2013-01-01 22:43:03
它不會顯示空字符,因爲空字符看起來不像任何東西。 str_cat是一個函數嗎?它不應該是char *,在這種情況下,sizeof將無法工作,因爲它只會返回指針的大小? –
@Ben'str_cat'是一個'char'數組。如果調試器知道它是一個數組,那麼它將正確顯示大小。 – 2013-01-01 22:46:29