2011-10-20 8 views
11

Ho utilizzato Twitter-OAuth-iPhone per sincronizzare il messaggio nella mia app. Va tutto bene su iOS4.
Dopo l'aggiornamento a iOS5, selezionare il menu 'Prodotto'> 'Analizza' e ricevere alcuni avvisi.Errore logico: l'operando sinistro di "&" è un valore immondizia

In NSData + Base64.m, E 'avvertimento 'L'operando a sinistra di' & 'è un valore spazzatura' enter image description here

Codici qui:

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

E ci sono altre messaggio di errore: error

Scusa, sono un no vice e non hanno alcun indizio su questi problemi.
Mi aiuteresti a sistemarlo per favore?
Many THANKS!

Modifica ------------
Logic ciclo screenshot:

rimozione di morti collegamento ImageShack

Codici completi: https://github.com/bengottlieb/Twitter-OAuth-iPhone/blob/master/Twitter+OAuth/MGTwitterEngine/NSData+Base64.m

Grazie qualsiasi suggerimento!

+0

Fare clic sul messaggio e vi mostrerà dove il valore dei rifiuti proviene. (Invia uno screenshot se hai ancora bisogno di aiuto.) – nschum

risposta

22

eludere lo inizializzando inbuf a un array di caratteri vuoto:

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

Oh, molto bello.

Quello che Clang ti sta dicendo è che, in alcune circostanze molto specifiche, potresti non riuscire mai a inizializzare inbuf[1]. Credo che questo potrebbe accadere per l'ingresso che sembrava qualcosa di simile:

a= 

C'è un'altra questione importante essere qui ricordato - le dimensioni delle inbuf e outbuf vengono scambiati. Dovrebbe essere char inbuf[4], outbuf[3], non viceversa.

+0

Grazie @duskwuff. Ho cambiato la riga 35 da 'unsigned char inbuf [3], outbuf [4];' a 'unsigned char inbuf [4], outbuf [3];'. L'avviso giallo è scomparso (ottimo!). Ma gli errori logici sono ancora visualizzati. Altri suggerimenti? – Jimi

0

è possibile aggiungere un if per garantire che il inbuf[x] ha un certo valore in esso

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)

Non sono sicuro però se è "infallibile".

Problemi correlati