如何判斷一個字符串是否在Eclipse和gdb中以null結尾?在「默認」調試下,如果我只看到我要存儲在引號中的文本,我可以假定它正確地以null結尾? 另外,複製字符串以確保正確終止的最佳方法是什麼?C:Eclipse/gdb和空終止字符串
回答
使用strncpy是安全的,這允許你指定一個最大長度,以防萬一沒有終止。這是一種棘手的檢查,但是如果在調試器中顯示正確,那麼它的正確終止。
編輯:應該明確指出,只有在指定長度的情況下,函數調用不會產生奇怪的結果,它纔會使其變得安全,但仍必須手動終止字符串。
一般而言,唯一不會被空終止的原因是程序員錯誤,因爲我相信C庫中的所有函數都會返回正確終止的字符串,可能的錯誤可能會忘記終結符的額外字節。當我遇到的字符串問題一直是由於失敗的空終止符(除了可能的自定義操作函數)之外,我很難想到時間。
這是不好的建議 - 如果源字符串是「n」個字符或更長字符,'strncpy()'不會終止緩衝區。正如http://www.gratisoft.us/todd/papers/strlcpy.html中所述 - 「我們還發現了許多程序員試圖用strncpy()和strncat()進行安全字符串操作的實例,但未能掌握API的微妙之處。「 – 2012-02-27 07:22:11
@MichaelBurr我知道,我的意思是,如果他不確定它是否被終止,他應該使用strncpy,但他仍然應該自行終止它。 – 2012-02-27 14:41:37
- 1. SQL字符串空終止?
- 2. 空終止字符串
- 3. C字符串空終止
- 4. C字符串的空終止
- 5. wcscat_s字符串不爲空終止
- 6. JavaScript WebSocket非空終止的字符串
- 7. 雙空終止的字符串
- 8. 終止字符串
- 9. C:字符串Concatenation:空終止字符串
- 10. ATOF和非空終止字符數組
- 11. HTMLInputHidden空終止字符
- 12. 終止unicode空字符
- 13. Byte'\ x09'終止字符串?
- 14. 終止C++字符串
- 15. 替代字符串終止
- 16. 範圍終止字符串
- 17. Perl NULL終止字符串
- 18. awk:非終止字符串
- 19. 爲什麼C#/ .Net字符串長度前綴和空終止?
- 20. C字符串空終止字符\ 0修改
- 21. C字符串有隨機尾隨字符,空終止問題?
- 22. 是否printf終止每個字符串與空字符?
- 23. Android JSON字符未終止字符串
- 24. Org.json.JSONException:字符未終止字符串
- 25. 空終止符\ 1?
- 26. 由空終止符分割C中的字符串
- 27. 爲什麼C++字符串在空終止符中結束?
- 28. 應該std ::結束爲字符串指向空過終止符?
- 29. 在字符串中間的空終止符
- 30. 如何在字符串中添加空終止符?
在gdb中,**「x/100sb string-variable」**會顯示前100個字符。用適當的數字替換100以查看您的字符串。 – Jack 2012-02-27 07:18:04
gdb x/100sb是不確定的,因爲字符串旁邊的內存位置可能具有隨機空值。 – resultsway 2014-08-26 18:28:16