2011-10-20 2 views
11

Tôi đã sử dụng Twitter-OAuth-iPhone để đồng bộ hóa thư trong ứng dụng của mình. Tất cả đều ổn trong iOS4.
Sau khi nâng cấp lên iOS5, hãy chọn menu 'Sản phẩm'> 'Phân tích' và có một vài cảnh báo.Lỗi logic: Toán hạng bên trái của '&' là giá trị rác

Trong NSData + Base64.m, Nó cảnh báo 'Các toán hạng trái của' & 'là một giá trị rác' enter image description here

Codes đây:

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

Và có khác thông báo lỗi: error

Xin lỗi tôi là không phó và không có bất kỳ đầu mối nào về những vấn đề này.
Bạn có thể giúp tôi khắc phục không?
Nhiều THANKS!

Sửa ------------
logic loop ảnh chụp màn hình:

loại bỏ liên kết ImageShack chết

Codes đầy đủ: https://github.com/bengottlieb/Twitter-OAuth-iPhone/blob/master/Twitter+OAuth/MGTwitterEngine/NSData+Base64.m

Cảm ơn bất cứ đề nghị!

+0

Bấm vào thông điệp và nó sẽ cho bạn thấy nơi các giá trị rác đến từ đâu. (Đăng ảnh chụp màn hình nếu bạn vẫn cần trợ giúp.) – nschum

Trả lời

22

để bên nó bằng cách khởi tạo inbuf để một mảng char trống:

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

Ồ, rất đẹp.

Điều Clang nói với bạn ở đây là, trong một số trường hợp rất cụ thể, bạn có thể không bao giờ khởi tạo inbuf[1]. Tôi tin rằng điều này có thể xảy ra đối với đầu vào mà nhìn cái gì đó như:

a= 

Có một vấn đề lớn được chỉ ra ở đây - các kích thước của inbufoutbuf được hoán đổi. Phải là char inbuf[4], outbuf[3], không phải ngược lại.

+0

Cảm ơn bạn @duskwuff. Tôi đã thay đổi dòng 35 từ 'unsigned char inbuf [3], outbuf [4];' thành 'unsigned char inbuf [4], outbuf [3];'. Cảnh báo màu vàng biến mất (tuyệt vời!). Nhưng các lỗi logic vẫn được hiển thị. Bất kỳ gợi ý nào khác? – Jimi

0

Bạn có thể thêm một câu lệnh if để đảm bảo rằng inbuf[x] có một số giá trị trong nó

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)

Tôi không chắc chắn mặc dù nếu đó là "đánh lừa bằng chứng".