是否可以将字符用作数组下标?
我的数组被初始化为容纳256个对象,因此似乎访问越界不会成为问题。但是,我得到了一些奇怪的分段错误,我发现这是由于我在读的字符值在某些情况下是负面的。
但是,我不知道这是怎么可能的。然后,我将它转换为unsigned char,但这也没有用。我最终也遇到了边界问题。我也尝试将char变量转换为int然后访问数组,但我仍然存在分段问题。我可以做些什么来缓解这种情况?能够通过字符访问数组很好,因为我的程序有一个ASCII集中每个字符的数组单元格。这似乎有道理,但我不知道为什么它不起作用。
答案 0 :(得分:3)
使用字符类型的值作为数组索引是完全有效的。数组索引可以是任何整数类型; char
,unsigned char
和signed char
都是整数类型。
但是普通char
可以是有符号或无符号的,具体取决于实现。它与signed char
具有相同的范围,或者与unsigned char
具有相同的范围;无论哪种方式,它仍然是一种独特的类型。
因此,如果您有一个包含256个元素的数组,则可以使用unsigned char
安全地对其进行索引,其范围至少为0到255.您无法使用char
安全地对其进行索引,因为它可能有负值。
然后,我将它转换为unsigned char,但这也不起作用。我最后也遇到了边界问题。
如果没有更多信息,我无能为力。
答案 1 :(得分:0)
使用unsigned char应解决问题的一半,尽管还有另一个边界问题需要注意。另一个问题是,您可能正在访问一个超出数组中最大元素数的元素。这是一个例子:
char myArray[256];
myArray[0] = 0; // Works just fine
myArray[1] = 0; // Works just fine
myArray[256] = 0; // Segfaults
它是段错误的,因为程序试图访问超出数组范围的变量(0到255)。 这可能就是这里发生的事情,但如果没有代码我就无法确定。