单片机c语言中数组互相干扰???????

har FMRead[size=12px]Binary(uchar ProMode, uchar *FileFlag, uchar ReadLen, uchar *KeyData, uchar *RecBuffer, uchar *Rec_len)
{
char status = 0, STATUS = 0;
uchar idata Buffer[8] = {0};
uchar idata Mac[8] = {0};
uchar MfTempBuffer[200];

///ÃüÁÎĺϳÉ
if(ProMode) MfTempBuffer[0] = PICC_READBIN_PRO; //CLA
else MfTempBuffer[0] = PICC_READBIN;
MfTempBuffer[1] = PICC_READ_BINARY; //INS
MfTempBuffer[2] = FileFlag[0]; //P1
MfTempBuffer[3] = FileFlag[1]; //P2
MfTempBuffer[4] = ReadLen;

if(ProMode)
{
///********调试 ******//
MfTempBuffer[4] = 0x04; //Len
memset(Mac, 0, 8); //¼ÓÃÜ
FMGetChallenge(0, Mac, &status); //»ñÈ¡Ëæ»úÊý

memcpy(Buffer, &Mac[2], 4);
memset(&Buffer[4], 0, 4);
SingleMAC(Buffer, MfTempBuffer, 5, KeyData, Mac); //¼ÆËãMAC¼ÓÃÜÂë
memcpy(&MfTempBuffer[5], Mac, 4);

for(status=0; status<8; status++)
{
RecBuffer[status] = Buffer[status];
RecBuffer[status + 8] = Mac[status];
}

memcpy(&RecBuffer[16], MfTempBuffer, 9);
Rec_len[0] = 25;
///**************************////
return 0;
}

status = FMCosCommand(MfTempBuffer, 5, RecBuffer, Rec_len);

return status;
}[/size]
请问上述的包括的调试代码中,我使用单片机发送数据到串口助手上显示,请问我通过for循环给RecBuffer[status] = Buffer[status]; RecBuffer[status + 8] = Mac[status]; 这两个赋值, 然后在 memcpy(&RecBuffer[16], MfTempBuffer, 9);

问题来了,最终显示的数据是,RecBuffer的前9个字节都为0,我觉得是受memcpy(&RecBuffer[16], MfTempBuffer, 9);这个语句的影响,请问我这样做有问题吗?????为什么数组这样子互相影响的?????????

memcpy(&RecBuffer[16], MfTempBuffer, 9);这个应该不会影响的,这是从RecBuffer[16]开始往后赋值。所以不会改变前9个字节。
改变前9个字节的应该是
for(status=0; status<8; status++)
{
RecBuffer[status] = Buffer[status];//这里0~7都赋值为Buffer[0~7];了。
RecBuffer[status + 8] = Mac[status];
}

所以你可以在这个for()语句之前打印看看Buffer[]的值是否都为0.追问

你好,我如果将memcpy(&RecBuffer[16], MfTempBuffer, 9); 注释了,是可以正常的,就是加了memcpy(&RecBuffer[16], MfTempBuffer, 9);这句才会把前面的数据清零的。如果我改成memcpy(&RecBuffer[16], MfTempBuffer, 20); 那么,前20个字节也会清零。

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-08-12
这个多看几遍
相似回答