-1

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

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

4

2 回答 2

4

因此,您的错误:

session.id[count]=0;

更改为:

session.id[count - 1]=0;
于 2013-10-26T06:26:38.467 回答
0

until=sizeof(session.id);

分配until给数组的大小(以字节为单位)。这适用于 'char' 元素类型,但会导致较大数据类型的溢出。你可能想要类似的东西

until = sizeof(session.id) / sizeof(session.id[0])
于 2013-10-26T12:07:50.027 回答