混淆数组声明
回答
不,上面不会创建锯齿状的字符串数组。它创建了一个包含两个维度的字符数组,能够存储长达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