逻辑错误:'&'的左操作数是垃圾值

时间:2011-10-20 15:29:37

标签: iphone ios5 mgtwitterengine

我使用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 个答案:

答案 0 :(得分:22)

通过将inbuf初始化为空char数组来回避它:

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

答案 1 :(得分:2)

哦,非常很好。

Clang在这里告诉你的是,在某些非常具体的情况下,你最终可能永远不会初始化inbuf[1]。我相信这可能会发生在输入上,如下所示:

a=

此处还指出​​了另一个主要问题 - inbufoutbuf的尺寸互换。应为char inbuf[4], outbuf[3],反之亦然。

答案 2 :(得分:0)

您可以添加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 ) 

我不确定它是否是“万无一失”。