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