Логическая ошибка: левый операнд '&' является значением мусора - PullRequest
11 голосов
/ 20 октября 2011

Я использовал 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

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

Изменить ------------
Скриншот логической петли:

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

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

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

Ответы [ 3 ]

22 голосов
/ 15 ноября 2011

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

unsigned char inbuf[4] = {};
unsigned char outbuf[3];
2 голосов
/ 21 октября 2011

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

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

a=

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

0 голосов
/ 26 октября 2011

Вы можете добавить оператор 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 ) 

Хотя я не уверен, что это "защита от дурака".

...