2011-10-20 7 views
11

Utilicé Twitter-OAuth-iPhone para sincronizar el mensaje en mi aplicación. Está bien en iOS4.
Después de actualizar a iOS5, seleccione el menú 'Producto'> 'Analizar', y recibe algunas advertencias.Error de lógica: el operando izquierdo de '&' es un valor de basura

En NSData + Base64.m, es advertencia 'El operando de la izquierda del' & 'es un valor de basura' enter image description here

códigos aquí:

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

y hay otros mensaje de error: error

Disculpa, soy un no vicio y no tienen ninguna pista sobre estos problemas.
¿Me ayudarías a solucionarlo, por favor?
¡Muchas GRACIAS!

Editar ------------
lógica de bucle pantalla:

eliminación de enlace ImageShack muertos

códigos completos: https://github.com/bengottlieb/Twitter-OAuth-iPhone/blob/master/Twitter+OAuth/MGTwitterEngine/NSData+Base64.m

Gracias cualquier sugerencia!

+0

Haga clic en el mensaje y se le mostrará cuando el valor de la basura viene. (Publique una captura de pantalla si aún necesita ayuda.) – nschum

Respuesta

22

paso lateral que inicializando inbuf a una matriz de caracteres vacía:

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

Oh, muy nice.

Lo que Clang le dice aquí es que, en algunas circunstancias muy específicas, puede terminar nunca inicializando inbuf[1]. Creo que esto podría suceder para la entrada que parecía algo así como:

a= 

Hay otro problema importante ser señalado aquí - los tamaños de inbuf y outbuf se intercambian. Debe ser char inbuf[4], outbuf[3], no al revés.

+0

Gracias @duskwuff. Cambié la línea 35 de 'unsigned char inbuf [3], outbuf [4];' a 'unsigned char inbuf [4], outbuf [3];'. La advertencia amarilla desapareció (¡genial!). Pero los errores de lógica todavía se muestran. ¿Alguna más pistas? – Jimi

0

Es posible añadir una sentencia if para asegurar que el inbuf[x] tiene algún valor en ella

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)

No estoy seguro de que si es "a prueba de tontos".

Cuestiones relacionadas