![]() |
1
29
我几乎总是用
最大的风险是,如果调用者将内容视为未签名(或者从错误信任的文件中读取内容)而向您传递了一个巨大的大小/偏移量,您可能会将其解释为负数,并且无法发现它超出了界限。例如
使用无符号算术的另一个原因(通常)-有时我使用索引作为位数组的偏移量,我想使用%8和/8或%32和/32。对于有符号类型,这些将是实际的除法运算。对于unsigned,可以生成预期的按位和/位移位操作。 |
![]() |
2
41
我想你应该用
真正地 大数组或指向一个非常大的内存部分的指针,那么我的“常规索引类型”就不会剪切它,因为这样就不能保证你可以从最后一个元素的地址中减去第一个元素的地址@那么应该用西罗的回答 https://stackoverflow.com/a/31090426/34509 . 就我个人而言,我尽量避免使用无符号类型,因为它们不能表示负边缘情况(例如,在向后迭代时循环结束值),但这是一种宗教辩论(不过,在这一阵营中,我并不孤单)。在需要使用无符号类型的情况下,我当然必须把我的信仰放在一边。 |
![]() |
3
15
此分析针对基于0的数组,这是常见的情况。
|
![]() |
4
10
如果你从
如果从零以下开始,则切换到从零开始,并使用
使用:
为什么? 使用方法:
|
![]() |
5
4
我的选择: ptrdiff\
许多人投了赞成票
|
![]() |
6
4
来自C99标准的公开WG14 N1256草案:
在C89中,最大的可移植数组大小实际上只有32'767字节,所以即使是有符号的
从§C89草案的2.2.4:
|
![]() |
7
2
如果事先知道数组的最大长度,可以使用
在所有其他情况下,我建议使用
根据天气情况,允许使用负索引。
|
![]() |
8
2
在你的情况下,我会用
如果你使用
就我个人而言,我经常
|
![]() |
9
1
我通常使用
如果要访问C99保证的最大大小(65535字节)的数组,请使用
请参阅以前的版本,了解C允许但不保证访问的数组。 |
![]() |
Jean-Francois T. · C(C99)中嵌套函数调用的限制 7 年前 |
![]() |
Tarun Maganti · 字符串在C中是如何工作的? 7 年前 |
![]() |
Mushy · 另一个空洞的话题;我只是想问一下,因为我很困惑 7 年前 |
![]() |
Rahul · 编译器如何在编译时不知道内存大小的情况下分配内存? 7 年前 |
![]() |
Sam · 将十六进制转换为循环中的一个字符串 7 年前 |
![]() |
Dror K. · 用%p打印空指针是未定义的行为? 7 年前 |
![]() |
lvella · 这个代码有效吗?[已关闭] 8 年前 |