gpt4 book ai didi

c++ - 如果使用无符号整数,通过减去 1 将基于 1 的编号转换为基于 0 的编号是否安全?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:57 25 4
gpt4 key购买 nike

在我维护的系统中,用户从基于 1 的索引方案的集合中请求元素。在 C++/C 中,值存储在从 0 开始的数组中。

如果错误输入 0 作为此函数的输入,以下假设代码是否可移植?将基于 1 的编号方案转换为基于 0 的编号方案时,是否有更好的方法来验证用户的输入?

const unsigned int arraySize;
SomeType array[arraySize];

SomeType GetFromArray( unsigned int oneBasedIndex )
{
unsigned int zeroBasedIndex = oneBasedIndex - 1;

//Intent is to check for a valid index.
if( zeroBasedIndex < arraySize )
{
return array[zeroBasedIndex];
}

//else... handle the error
}

我的假设是 (unsigned int)( 0 - 1 ) 总是大于 arraySize;这是真的吗?

正如一些人在下面的回答中所建议的那样,另一种方法是检查 oneBasedIndex 并确保它大于 0:

const unsigned int arraySize;
SomeType array[arraySize];

SomeType GetFromArray( unsigned int oneBasedIndex )
{
if( oneBasedIndex > 0 && oneBasedIndex <= arraySize )
{
return array[oneBasedIndex - 1];
}

//else... handle the error
}

最佳答案

对于无符号类型,0-1 是该类型的最大值,因此它始终是 >= arraySize。换句话说,是的,那是绝对安全的。

关于c++ - 如果使用无符号整数,通过减去 1 将基于 1 的编号转换为基于 0 的编号是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9897698/

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