源码如下,是想把一个字符串转成BCD码,问题是:连续调用这函数时虽然给函数的是不同的buf参数,但buf相互之间有影响,比如定义如下变量:
char buf1[10];
char buf2[10];
String2BCD(str, buf1);
String2BCD(str, buf2);
buf2的调用会把buf1的内容也改了,感觉是sscanf的问题,好象内存重叠了,请高手指点,谢谢
void CRevDataDlg::String2BCD(const CString &str, char *buf, int bufSize)
{
ASSERT(str.GetLength() % 2 == 0);
int halfLen = str.GetLength() / 2;
ASSERT(halfLen <= bufSize); char * pStr = new char[str.GetLength() + 1];
strcpy(pStr, str);
for (int i = 0; i < halfLen; i ++){
sscanf(pStr + i * 2, "%02x", &buf[i]);
}
delete [] pStr;
}
char buf1[10];
char buf2[10];
String2BCD(str, buf1);
String2BCD(str, buf2);
buf2的调用会把buf1的内容也改了,感觉是sscanf的问题,好象内存重叠了,请高手指点,谢谢
void CRevDataDlg::String2BCD(const CString &str, char *buf, int bufSize)
{
ASSERT(str.GetLength() % 2 == 0);
int halfLen = str.GetLength() / 2;
ASSERT(halfLen <= bufSize); char * pStr = new char[str.GetLength() + 1];
strcpy(pStr, str);
for (int i = 0; i < halfLen; i ++){
sscanf(pStr + i * 2, "%02x", &buf[i]);
}
delete [] pStr;
}
解决方案 »
- 安装VS时的错误 帮帮我吧
- 请教关于CComboBox 问题
- gcroot<T> 如何转换成long *
- EDIT控件如何添加WS_BORDER 属性?
- 请问: 关于 DirectSound CreateSoundBuffer函数报错
- 如何捕捉COM中出现的错误?
- 提个问,帮帮忙,我很急,谢谢了。
- 有参加今天(21号)的武汉会展中心的招聘会的同志吗?进来谈谈感想
- 我现在手头有一个基于opengl的win32控制台项目,怎么转成mfc项目?
- MFC VC++ 编程 共享本地网络 创建无线AP EnableSharing出错
- 我读入“專”这个字,再获取字符编码时,发现他是GBK编码,有没有办法按照BIG5编码读入呢?
- 电影中的程序界面
char buf2[10];多分配一个字符
然后String2BCD第三个参数写上10
String2BCD(str, buf1, 10);
String2BCD(str, buf2, 10);
为什么要多分配个字符呢?
char * pStr = new char[str.GetLength() + 1];
strcpy(pStr, str);
拷贝到pStr做什么?
拷贝过去是想用sscanf,因为CString不支持&str[i]这样的用法