在C / C ++中使用字符作为数组下标

时间:2012-07-30 05:32:22

标签: c++ arrays

是否可以将字符用作数组下标?

我的数组被初始化为容纳256个对象,因此似乎访问越界不会成为问题。但是,我得到了一些奇怪的分段错误,我发现这是由于我在读的字符值在某些情况下是负面的。

但是,我不知道这是怎么可能的。然后,我将它转换为unsigned char,但这也没有用。我最终也遇到了边界问题。我也尝试将char变量转换为int然后访问数组,但我仍然存在分段问题。

我可以做些什么来缓解这种情况?能够通过字符访问数组很好,因为我的程序有一个ASCII集中每个字符的数组单元格。这似乎有道理,但我不知道为什么它不起作用。

2 个答案:

答案 0 :(得分:3)

使用字符类型的值作为数组索引是完全有效的。数组索引可以是任何整数类型; charunsigned charsigned 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)。 这可能就是这里发生的事情,但如果没有代码我就无法确定。