使用sizeof表示数组下标时发出警告

时间:2013-10-26 06:22:04

标签: c arrays sizeof

今天我决定用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

有谁能告诉我这有什么问题?

2 个答案:

答案 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])