2012-02-27 55 views
1

如何判斷一個字符串是否在Eclipse和gdb中以null結尾?在「默認」調試下,如果我只看到我要存儲在引號中的文本,我可以假定它正確地以null結尾? 另外,複製字符串以確保正確終止的最佳方法是什麼?C:Eclipse/gdb和空終止字符串

+0

在gdb中,**「x/100sb string-variable」**會顯示前100個字符。用適當的數字替換100以查看您的字符串。 – Jack 2012-02-27 07:18:04

+0

gdb x/100sb是不確定的,因爲字符串旁邊的內存位置可能具有隨機空值。 – resultsway 2014-08-26 18:28:16

回答

1

使用strncpy是安全的,這允許你指定一個最大長度,以防萬一沒有終止。這是一種棘手的檢查,但是如果在調試器中顯示正確,那麼它的正確終止。

編輯:應該明確指出,只有在指定長度的情況下,函數調用不會產生奇怪的結果,它纔會使其變得安全,但仍必須手動終止字符串。

一般而言,唯一不會被空終止的原因是程序員錯誤,因爲我相信C庫中的所有函數都會返回正確終止的字符串,可能的錯誤可能會忘記終結符的額外字節。當我遇到的字符串問題一直是由於失敗的空終止符(除了可能的自定義操作函數)之外,我很難想到時間。

+1

這是不好的建議 - 如果源字符串是「n」個字符或更長字符,'strncpy()'不會終止緩衝區。正如http://www.gratisoft.us/todd/papers/strlcpy.html中所述 - 「我們還發現了許多程序員試圖用strncpy()和strncat()進行安全字符串操作的實例,但未能掌握API的微妙之處。「 – 2012-02-27 07:22:11

+0

@MichaelBurr我知道,我的意思是,如果他不確定它是否被終止,他應該使用strncpy,但他仍然應該自行終止它。 – 2012-02-27 14:41:37