gpt4 book ai didi

c - 数组中有符号和无符号字符的索引有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:10 25 4
gpt4 key购买 nike

我必须遵循代码,但它不会生成我预期的结果。添加 unsigned char 将使它工作。 (我意识到通过另一个函数做相反的事情是行不通的,但没有得到相反的效果!)谁能给我解释一下。

代码是将 8 个字符的字符串替换为一些随机字符。

我当前的代码:

char subs[8][256];

void perfSubs(char* input){
for (int i = 0; i < 8; i++)
input[i] = subs[i][input[i]];
}

我应该把它改成

input[i] = subs[i][(unsigned char)input[i]];

最佳答案

正如其他人所提到的,众所周知,C 具有 unsigned charsigned charchar 类型。
charunsigned charsigned char 具有相同的范围,但仍然是不同的类型。

subs[i][input[i]]; 可能涉及 subs[i][some_negative_value] 的负索引导致问题。

input[i] = subs[i][(unsigned char)input[i]]; 将负值折叠成可能来自 input[i]< 的正值,但这是实现定义的行为。

只需使用 char 即可获得一个简单的解决方案。


为避免负索引,每当代码使用 char 作为索引时,减去最小 charCHAR_MINCHAR_MIN 的典型值为 0 或 -128。

同时避免魔数(Magic Number) 256 并使用基于 char 的数组大小。

char subs[8][CHAR_MAX + 1 - CHAR_MIN];

input[i] = subs[i][input[i] - CHAR_MIN];

根据 char 是否签名,使用索引 'A' 的位置可能会导致不同的索引,尽管在给定的编译中是一致的。

subs[0]['A' - CHAR_MIN] = 'x';

关于c - 数组中有符号和无符号字符的索引有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25856440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com