我有以下代码:
int some_array[256] = { ... }; int do_stuff(const char* str) { int index = *str; return some_array[index]; }
显然上面的代码会导致某些平台出现错误,因为*str实际上可能是负面的.
所以我想到了两个可能的解决方案:
在赋值(unsigned int index = (unsigned char)*str;
)上转换值.
传递const unsigned char*
代替.
编辑:这个问题的其余部分没有得到治疗,所以我把它移到一个新的线程.
的符号性char
的确是依赖于平台的,但你知道的是,有尽可能多的价值char
,因为是unsigned char
和转换是单射.因此,您绝对可以转换值以将查找索引与每个字符相关联:
unsigned char idx = *str; return arr[idx];
你当然应该确保arr
至少有UCHAR_MAX + 1
元素.(这可能会导致欢闹的边缘情况sizeof(unsigned long long int) == 1
,幸运的是,很少见.)