首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个奇怪的有关问题,指针常量内容被改了

2012-03-09 
一个奇怪的问题,指针常量内容被改了char*ConvertBArrayToStr(constBYTE*pSrc,intnSrcLen,char*pOutStr,int

一个奇怪的问题,指针常量内容被改了
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];

热点排行
Bad Request.