今天我决定用gcc -W -Wall编译我的代码,它给了我一个我无法解决的警告。
我试图减少我一直在使用的#defines的数量,并认为sizeof()就是答案。其他一切似乎都没关系,只有这一个警告,但它让我非常厌恶:
if (1) // set random id string for this session
{
register unsigned int count, until=sizeof(session.id);
for (count=0;count<until;count++)
{ session.id[count]=randchar(); }
session.id[count]=0;
}
编译器正在给我这个警告:
warning: array subscript is above array bounds
有谁能告诉我这有什么问题?
答案 0 :(得分:4)
你的错误是因为:
session.id[count]=0;
改为:
session.id[count - 1]=0;
答案 1 :(得分:0)
在
until=sizeof(session.id);
将until
分配给数组的大小(以字节为单位)。这适用于`char'元素类型,但会导致较大数据类型的溢出。你可能想要像
until = sizeof(session.id) / sizeof(session.id[0])