2013-10-26 3 views
-1

Сегодня я решил скомпилировать свой код с gcc -W -Wall, и это дает мне предупреждение, которое я просто не могу решить.Предупреждение при использовании sizeof для индекса массива

Я пытался уменьшить количество #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

-1 для ввода в заблуждение меня уродливым форматированием и отступом. –

+0

Довольно суровый к -1 для использования Whitesmiths (не то, что я люблю Whitesmiths). –

+0

@MichaelBurr Это безумный стиль форматирования, если это вообще стиль форматирования. Это просто заставило меня написать неправильный ответ. Суровые? Тогда что ты назовешь тем, что сделал ОП? –

ответ

4

ваша ошибка из-за этого:

session.id[count]=0; 

изменения к этому:

session.id[count - 1]=0; 
+0

@AndreyT Ну ладно, да! Отверните плохое форматирование. ** Серьезно. ** –

+0

Ах да, я вижу это сейчас. Благодарю. – Lee

0

until=sizeof(session.id); 

назначает until на размер (в байтах) массива. Это работает для типов элементов `char ', но приведет к переполнениям для более крупных типов данных. Вероятно, вы хотите что-то вроде

until = sizeof(session.id)/sizeof(session.id[0]) 
Смежные вопросы