Ошибка логики: левый операнд "&" - значение мусора

Я использовал Twitter-OAuth-iPhone для синхронизации сообщения в своем приложении. Все в порядке iOS4.
После обновления до iOS5 выберите меню "Продукт" > "Анализ" и получите несколько предупреждений.

В NSData + Base64.m, Предупреждение ' Левый операнд' & ' это значение для мусора enter image description here

Коды здесь:

if( ixinbuf == 4 ) {
ixinbuf = 0;
outbuf [0] = ( inbuf[0] << 2 ) | ( ( inbuf[1] & 0x30) >> 4 );
outbuf [1] = ( ( inbuf[1] & 0x0F ) << 4 ) | ( ( inbuf[2] & 0x3C ) >> 2 );
outbuf [2] = ( ( inbuf[2] & 0x03 ) << 6 ) | ( inbuf[3] & 0x3F );

for( i = 0; i < ctcharsinbuf; i++ ) 
    [mutableData appendBytes:&outbuf[i] length:1];
}

И есть другое сообщение об ошибке: error

Извините, что я новичок и понятия не имею об этих проблемах.
Не могли бы вы помочь мне исправить это? Многие СПАСИБО!

Изменить ------------
Снимок экрана цикла Logic:

удаление мертвой ссылки ImageShack

Полные коды: https://github.com/bengottlieb/Twitter-OAuth-iPhone/blob/master/Twitter+OAuth/MGTwitterEngine/NSData+Base64.m

Спасибо за любое предложение!

Ответ 1

обойти его, инициализируя inbuf пустым массивом char:

unsigned char inbuf[4] = {};
unsigned char outbuf[3];

Ответ 2

О, очень приятно.

Что говорит вам Кланг, так это то, что при некоторых особых обстоятельствах вы никогда не сможете инициализировать inbuf[1]. Я считаю, что это может произойти для ввода, который выглядел примерно так:

a=

Здесь еще одна важная проблема - размеры inbuf и outbuf меняются местами. Должно быть char inbuf[4], outbuf[3], а не наоборот.

Ответ 3

Вы можете добавить оператор if, чтобы убедиться, что inbuf[x] имеет какое-то значение в нем

if (sizeof(inbuf[1]) > 0x1)
    outbuf [0] = ( inbuf[0] > 4 );
if (sizeof(inbuf[2]) > 0x1)
    outbuf [1] = ( ( inbuf[1] & 0x0F ) > 2 );
if (sizeof(inbuf[3]) > 0x1)
    outbuf [2] = ( ( inbuf[2] & 0x03 ) 

Я не уверен, хотя, если это "доказательство дурака".