TO: lanzhengpeng2(兰征鹏),我当然知道是0xCCCC,如果你说调试的时候是这样,那么请问, 在Win98下可以不注意字符串结尾的问题,但要是在Win2k下就会出现类似死循环,很久以后也 许能继续执行,就是因为用某些API得到的字符串值后没有记住用'\0'结尾,都是Release版, 就没有调试环境了吧,为什么还这样呢。 要是你不相信,你也可这自已做做测试,buf[10]; buf[8]='\0'; AfxMessageBox(buf); 在Win98和Win2k下,你将得到不同的结果,你相信吗?我的QQ:12953091,很高和lanzhengpeng2(兰征鹏)一起探讨VC++编程。
烫"的内码是—0xCCCC是VC调试手段的一种。 因为0xCC,0xCD比较少的使用,所以VC在运行调试版本的时候,分配的内存都初始话为烫烫。如果你看到你使用的内存处存在一堆的烫烫 1.其实这个问题并不是注册表的问题, 2.其实这个就是数组或指针的越界问题,你的指针指向了另一个地方,或是操作没有成功 3.在用数组前你应先初始化你的数组,memset...我想这样就不会有问题了。set active config to release....
注意那个参数 LPBYTE lpData, // data buffer
定义为 char lpData[LENGTH];
LENGTH最小为237,如果你的数据长的话这个值要再大一些,至于为什么是237我也不知道
我是从261一个一个试下来得知的,
不知是否有高手可以告诉我是为什么
然后就会得到本键值的大小,然后带入参数,就会按照键值的大小得到数据,旧不会有烫了!!要是再不明白给我发邮件!! [email protected]
所以你得到值后没有加0,在Win2K中这个字符串就很难结束。
就是很长的烫烫烫烫烫烫烫烫。
:)
祝你好运。
你去看看"烫"的内码是什么——0xCCCC。这是VC调试手段的一种。
因为0xCC,0xCD比较少的使用,所以VC在运行调试版本的时候,分配的内存都初始话为烫烫。如果你看到你使用的内存处存在一堆的烫烫,显然,你什么地方错了,要不然,就是BT导致你刚喝了100度的开水。
char buf[1024];
DWORD cbData = sizeof(buf);
DWORD type;
RegQueryValueEx(hkey, "Software\\ABC\\CDE", NULL, &type, buf, &cbData);
而且当发现此类错误时,也有是上面仁兄所提的最后没有边界的问题。当然你加上边界就可以了
我怀疑你的问题错误的来源有三个,
一、注册表键值读出错误。
二、数组太小,注册表键值中的数据比你的数组要长,所以本身就越界了,从而在最后没有0
三、如果上面都没有错误,那就是你编程不小心,错用了另外的一个没有初始化的变量。
不知道我的分析对你有没有帮助
在Win98下可以不注意字符串结尾的问题,但要是在Win2k下就会出现类似死循环,很久以后也
许能继续执行,就是因为用某些API得到的字符串值后没有记住用'\0'结尾,都是Release版,
就没有调试环境了吧,为什么还这样呢。
要是你不相信,你也可这自已做做测试,buf[10];
buf[8]='\0';
AfxMessageBox(buf);
在Win98和Win2k下,你将得到不同的结果,你相信吗?我的QQ:12953091,很高和lanzhengpeng2(兰征鹏)一起探讨VC++编程。
因为0xCC,0xCD比较少的使用,所以VC在运行调试版本的时候,分配的内存都初始话为烫烫。如果你看到你使用的内存处存在一堆的烫烫
1.其实这个问题并不是注册表的问题,
2.其实这个就是数组或指针的越界问题,你的指针指向了另一个地方,或是操作没有成功
3.在用数组前你应先初始化你的数组,memset...我想这样就不会有问题了。set active config to release....