2011-10-20 13 views
11

Użyłem Twitter-OAuth-iPhone do zsynchronizowania wiadomości w mojej aplikacji. To wszystko w iOS4.
Po uaktualnieniu do wersji iOS5 wybierz menu "Produkt"> "Analizuj" i otrzymałem kilka ostrzeżeń.Błąd logiczny: lewy operand z "&" jest wartością śmieci

W NSData + Base64.m, to ostrzeżenie 'lewy argument o' & 'jest wartością śmieci' enter image description here

Kody tutaj:

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]; 
} 

i są inne komunikat o błędzie: error

Niestety, nie jestem i nie mają pojęcia o tych problemach.
Czy możesz mi pomóc to naprawić?
Wiele DZIĘKUJĘ!

Edit ------------
Logic pętla screenshot:

usuwając martwy link ImageShack

pełne kody: https://github.com/bengottlieb/Twitter-OAuth-iPhone/blob/master/Twitter+OAuth/MGTwitterEngine/NSData+Base64.m

Dzięki wszelkie sugestie!

+0

Kliknij na wiadomości i pokaże ci, gdzie wartość śmieci pochodzi. (Opublikuj zrzut ekranu, jeśli nadal potrzebujesz pomocy.) – nschum

Odpowiedz

22

Odskok go przez inicjowanie inbuf do pustej tablicy char:

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

Och, bardzo ładny.

To, co mówi Ci Clang, to fakt, że w pewnych bardzo szczególnych okolicznościach możesz nie zakończyć inicjowania inbuf[1]. Wierzę, że to może się zdarzyć na wejściu, który wyglądał mniej więcej tak:

a= 

Jest kolejnym ważnym problemem jest tu podkreślić - rozmiary inbuf i outbuf są zamienione. Powinien być char inbuf[4], outbuf[3], a nie odwrotnie.

+0

Dziękujemy @duskwuff. Zmieniono wiersz 35 z 'unsigned char inbuf [3], outbuf [4];' do "unsigned char inbuf [4], outbuf [3];" Żółte ostrzeżenie zniknęło (świetnie!). Ale błędy logiczne są nadal wyświetlane. Więcej wskazówek? – Jimi

0

Możesz dodać if aby upewnić się, że inbuf[x] ma jakąś wartość w to

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)

Nie jestem pewien, ale jeśli to jest „głupi dowód”.

Powiązane problemy