一个奇怪的问题,指针常量内容被改了
char* ConvertBArrayToStr(const BYTE *pSrc, int nSrcLen, char *pOutStr, int nRadix)
{
if (NULL==pSrc || nSrcLen <0 || NULL== pOutStr)
return NULL;
pOutStr[0] = '\0 ';
if (nRadix == 16)
{
for (int i=0; i <nSrcLen; i++)
sprintf(pOutStr+lstrlen(pOutStr), "%.2x ", pSrc[i]);
}
else
{
for (int i=0; i <nSrcLen; i++)
sprintf(pOutStr+lstrlen(pOutStr), "%.2d ", pSrc[i]);
}
return pOutStr;
上面的函数是用来将BYTE数组转换成字符串的。
BYTE arucCardVector[32];
memset(arucCardVector, 0xff, 32);
arucCardVector[3] = 0xeb; // 1110 1011
char arucStr[64];
memset(arucStr, 0, 64);
ConvertBArrayToStr((const BYTE*)arucCardVector, 32, arucStr, 16);
单步调试的时候,arucCardVector[0]的值被改了,在ConvertBArrayToStr()中的循环的i=31的时候被改的。
真的想不通啊
[解决办法]
越界了
char arucStr[64];改为更大一些.char arucStr[128];
[解决办法]
两次 for (int i=0; i <nSrcLen; i++),
每次 %.2? 格式控制,
需要的空间最大是 128,
64 基本上会越界 ...
[解决办法]
arucStr最后没有 '\0 '结束符。
改大些就可以了.char arucStr[65];