0

可以使用字符作为数组下标吗?

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

但是,我不知道这怎么可能。然后,我将它转换为无符号字符,但这也不起作用。我最终也在那里遇到了边界问题。我还尝试将 char 变量转换为整数,然后访问数组,但我仍然遇到分段问题。

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

4

2 回答 2

3

使用字符类型的值作为数组索引是完全有效的。数组索引可以是任何整数类型;char, unsigned char, 和signed char都是整数类型。

但是 plainchar可以是有符号的也可以是无符号的,这取决于实现。要么与 具有相同的范围,要么与;signed char具有相同的范围 unsigned char无论哪种方式,它仍然是一种独特的类型。

因此,如果您有一个包含 256 个元素的数组,则可以使用 安全地对其进行索引unsigned char,其范围至少为 0 到 255。您不能使用 安全地对其进行索引char,因为它可能具有负值。

然后,我将它转换为无符号字符,但这也不起作用。我最终也在那里遇到了边界问题。

如果没有更多信息,我无能为力。

于 2012-07-30T05:50:52.057 回答
0

使用 unsigned char 应该可以解决一半的问题,尽管您还需要注意另一个边界问题。另一个问题是您可能访问的元素超出了数组中的最大元素数。这是一个例子:

char myArray[256];
myArray[0]   = 0; // Works just fine
myArray[1]   = 0; // Works just fine
myArray[256] = 0; // Segfaults

它出现段错误是因为程序试图访问超出数组范围(0 到 255)的变量。这可能就是这里发生的事情,但没有代码我无法确定。

于 2012-07-30T05:58:46.320 回答