怪问题~你遇到过没~

jjfwenwenti 2008-04-27 12:47:45
就一句sscanf(szTmp,"%02X%02X%02X%02X",&tmp[0],&tmp[1],&tmp[2],&tmp[3]);后
成员变量int m_val不可读了,报0xc0000005,(不是指针,就普通int也不可读)删除这句就没事~
你说怪不?
...全文
75 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
effective_person 2008-04-27
  • 打赏
  • 举报
回复
在sscanf(szTmp,"%02X%02X%02X%02X",&tmp[0],&tmp[1],&tmp[2],&tmp[3]);后面加
ffush(stdin);刷新缓存区
后在读入m_val变量。
jjfwenwenti 2008-04-27
  • 打赏
  • 举报
回复
星羽 的 不错 额 已经结贴了~
jjfwenwenti 2008-04-27
  • 打赏
  • 举报
回复
arong1234 阿荣使我茅塞顿开~困扰n个晚上了...

PS:没想到这么晚了还这么多人在,尤其两位热心~
以后散分我会注意的
星羽 2008-04-27
  • 打赏
  • 举报
回复

int main()
{
char szTmp[] = "AA BB CC DD";
DWORD dw[4];
BYTE tmp[4];

sscanf(szTmp,"%02X %02X %02X %02X",&dw[0],&dw[1],&dw[2],&dw[3]);

for (int i = 0; i < 4; ++i) {
tmp[i] = dw[i];
printf("%02X ", tmp[i]);

}


return 0;
}


jjfwenwenti 2008-04-27
  • 打赏
  • 举报
回复
我是从字符串读取,没有用到键盘,
比如"AABB CCDD",每2个之间可能有空格,读到BYTE tmp[4];
/*"AABBCCDD","AA BB CC DD","AA BB CCDD"*/
结果tmp[0]=0xAA;tmp[1]=0xBB;tmp[2]=0xCC;tmp[3]=0xDD;
只是成员变量int m_val顿时不可读了,报0xc0000005,(不是指针,就普通int也不可读)删除这句就没事~
你说怪不?
arong1234 2008-04-27
  • 打赏
  • 举报
回复
sscanf不做类型检查,他只根据格式化控制符判断后面可以写入多少字节。对于%02X来说,虽然你认为读入的时一字节,实际上他当作int类型读,读入四字节,因此如果tmp不是int或者unsigned int类型数组,就存在内存访问越界

[Quote=引用楼主 jjfwenwenti 的帖子:]
就一句sscanf(szTmp,"%02X%02X%02X%02X",&tmp[0],&tmp[1],&tmp[2],&tmp[3]);后
成员变量int m_val不可读了,报0xc0000005,(不是指针,就普通int也不可读)删除这句就没事~
你说怪不?
[/Quote]

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧