局部变量好像提前被清除了?

fxworld 2012-06-25 05:24:37
void GetMyNum( WCHAR *pMyNum,DWORD *pdwChars )
{
BYTE pNum[]={0x23,0x45,0x56,0x34,0x4f,0xff,0xff,0xff};

//这里 dwChars必须声明为 const DWORD,不然会被提前清除,不知道为什么?
DWORD dwChars = sizeof( pNum )*2;

if( pdwChars )
{ *pdwChars = dwChars; }

if( !pMyNum )
{ return; }

for( UINT i=0; i< sizeof( pNum ) ; i++ )
{
WCHAR myChar[2]={0};
_stprintf( myChar,_T("%02x"), pNum[i] );
_tcsncat( pMyNum, myChar, 2 );
}

//运行到这里时,dwChars被置为零了,有时候甚至提示 access violation ,搞不懂了

//替换 f为 空格
for( UINT i=0; i< dwChars; i++ )
{
if( towlower( pMyNum[i] ) == _T('f') )
{ pMyNum[i] = _T(' '); }
}


}
//-----------------------------------------------------------------------------

求解,dwChars为什么必须声明为 const DWORD ?
...全文
137 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
W170532934 2012-06-25
  • 打赏
  • 举报
回复
恭喜楼主解决问题
fxworld 2012-06-25
  • 打赏
  • 举报
回复

弄明白了,函数 _stprintf( myChar,_T("%02x"), pNum[i] ) 会追加一个NULL;所以必须多声明一个字符,呵呵。
fxworld 2012-06-25
  • 打赏
  • 举报
回复

还是vc好用些,VC能说出 myChar 可能导致 堆栈损坏, bc却连个警告都没有。
fxworld 2012-06-25
  • 打赏
  • 举报
回复

找到原因了,WCHAR myChar[2] 声明的字符数少了,导致 Stack 被损坏,把
//----------------------------------------
WCHAR myChar[2]={0};
_stprintf( myChar,_T("%02x"), pNum[i] );
//------------------------------------------

改为:
//----------------------------------------
WCHAR myChar[3]={0};
_stprintf( myChar,_T("%02x"), pNum[i] );
//------------------------------------------

问题得以解决,不过不太理解,pNum[i]明明只转为2个字符,为什么非要大于2个呢?



老马何以识途 2012-06-25
  • 打赏
  • 举报
回复
也许错误出在其他函数,因为非法访问内存,把这里的变量改了。
qixing1115 2012-06-25
  • 打赏
  • 举报
回复
不要总在错误提示的地方找错误,要学会推理,跟踪
自信男孩 2012-06-25
  • 打赏
  • 举报
回复
不应该为0,除非在这中间有修改该变量的。
fxworld 2012-06-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

不可能被提前清除的,局部变量会在函数调用完清除。
[/Quote]

我用的是bc2010,试一下便知。
恨天低 2012-06-25
  • 打赏
  • 举报
回复
不可能被提前清除的,局部变量会在函数调用完清除。
fxworld 2012-06-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

_tcsncat( pMyNum, myChar, 2 );

内存越界了吧
[/Quote]

pMyNum使用了足够的空间,不会越界的.
justkk 2012-06-25
  • 打赏
  • 举报
回复
_tcsncat( pMyNum, myChar, 2 );

内存越界了吧

64,654

社区成员

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

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