Chinaunix

标题: 内存拷贝 中间一个字符丢失,很奇怪??大家遇到过这种情况么??? [打印本页]

作者: usbzip    时间: 2013-08-06 12:19
标题: 内存拷贝 中间一个字符丢失,很奇怪??大家遇到过这种情况么???
做测试的时候发现的一个问题,字符串拷贝后丢失了一个字节 不在头也不在尾而是中间。

在一次测试时出现 ,后面的测试再没有发现过。

sMsg是源字符串 如 123456/78
buffer0 显示字符串 3132333435363738 2F也就是‘/’没有显示

这个转码函数用了多年了 没有发现过这个问题,'/'的消失弄得我也是一头雾水,以前没有碰到过。
大家谁碰到过类似的问题么 ????

我的猜测 转码函数的问题 系统内存的问题

stM_D_P 是一个结构体 stM_D_P.sMessage 结构体里的字符串数组

     memcpy(stM_D_P.sMessage,sMsg,ilength);  

     iLen=stM_D_P.nLength;   
     High_Tran_Low((char *)&stM_D_P.nLength,sizeof(short));
     memcpy(sSnd_Buff,(unsigned char *)&stM_D_P,iLen);
     sSnd_Buff[iLen]=0;
      
     gsmBytes2String(sSnd_Buff,buffer0,iLen);

printf("Send_Msg  16jinzhi:[%s]\n",buffer0);


int gsmBytes2String(const unsigned char* pSrc, char* pDst, int nSrcLength)
{
                char tab[]="0123456789ABCDEF"; // 0x0-0xf的字符查找表
                int i = 0 ;
                for (; i < nSrcLength; i++)
                {
                        *pDst++ = tab[*pSrc >> 4]; // 输出高4位
                        *pDst++ = tab[*pSrc & 0x0f]; // 输出低4位
                        pSrc++;
                }

                // 输出字符串加个结束符
        *pDst = '\0';

        // 返回目标字符串长度
        return (nSrcLength * 2);
}
作者: hanxin83    时间: 2013-08-06 13:51
内存越界什么的吧. 你gdb watch这个地址跟一下就好了.

系统内存的问题?别这样想--
作者: djsxut    时间: 2013-08-07 10:34
我试了下, 直接传入你的那串源字符串到 gsmBytes2String, 可以达到你以前的预期: 3132333435362F3738。

ASCII下, 是不是调用这个函数之前 / 被去掉了(High_Tran_Low)? 函数开头加输出试试。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2