混淆數組聲明
回答
不,上面不會創建鋸齒狀的字符串數組。它創建了一個包含兩個維度的字符數組,能夠存儲長達49個字符的C字符串(第50個char
用於終止符'\0'
)。
交錯數組的聲明是這樣的:
char *strings[USHRT_MAX];
隨着你就需要爲各個串分配內存指針數組,但字符串的長度能由一個元素不同而有所變化。另一方面,你的數組分配了所有的內存,但是它限制了字符串的長度,並且有可能使用比存儲較短字符串更多的內存。
啊,好的謝謝你。所以我認爲,如果USHRT_MAX大於49個字符,它會覆蓋相鄰的堆棧位置。 – user2153547
@ user2153547如果您嘗試訪問'strings [stringNumber] [charNumber]',並且'stringNumber'大於或等於'USHRT_MAX',那麼您的程序可能會崩潰。如果'stringNumber'小於'USHRT_MAX',但'charIndex'大於49,那麼你的程序也可能會崩潰。無論它是否要覆蓋相鄰的堆棧位置,都是特定於實現的:'strings'可能位於靜態內存中,或者可能根本沒有堆棧。 – dasblinkenlight
此:
char strings[USHRT_MAX][50];
只是提供字符的2維陣列。大小爲USHRT_MAX
通過50這不是一個交錯數組,交錯數組是一個具有各種長度的行,在概念上,這將是:
strings[0] = ['a']['\0']
strings[1] = ['j']['a']['g']['\0']
strings[2] = ['a']['r']['r']['a']['y']['\0']
凡爲你的更像是:
strings[0] = ['a']['\0'][ ][ ][ ][ ]
strings[1] = ['j']['a']['g']['\0'][ ][ ]
strings[2] = ['a']['r']['r']['a']['y']['\0']
注意在第二個例子中,它們在每一行中都有相同數量的元素,但並不是所有元素都被填充。
- 1. 混淆SML聲明
- 2. 條件聲明混淆PHP
- 3. 混淆指針聲明
- 4. 混淆類型聲明?
- 5. 混淆Javascript類聲明
- 6. C++繼續聲明混淆
- 7. 混淆方法聲明
- 8. 混淆遠期聲明
- 9. 函數指針聲明語法混淆
- 10. 混淆函數表達式和聲明
- 11. Java數組聲明混亂
- 12. C++語法混淆 - 聲明無符號字符數組
- 13. 數組混淆
- 14. 數組混淆
- 15. #定義與{}和聲明混淆
- 16. 切換聲明:作業混淆
- 17. 最初聲明爲不斷混淆
- 18. 懸停屬性聲明混淆
- 19. 混淆使用「使用」聲明C#
- 20. 小費計算器聲明混淆
- 21. jQuery數組混淆
- 22. 混淆單聲道?
- 23. 對數據類型的Java聲明混淆
- 24. haskell語法混淆 - 函數類型聲明
- 25. 函數類型聲明多個單詞混淆了我
- 26. 與Telerik/Kendo函數聲明語法混淆
- 27. 混淆聲明,使用函數從jquery插件裏面調用
- 28. 混淆Perl數組行爲
- 29. 與數組對象混淆
- 30. 動態數組混淆
在發佈這樣的簡單問題之前,先學習一些基礎知識。 – Kishore