这是你接受结果的变量没初始化的原因。
如果你的变量为a,则在一开始就要:memset(a,0,sizeof(a));

解决方案 »

  1.   

    操作没成功
    注意那个参数  LPBYTE lpData,        // data buffer
    定义为 char lpData[LENGTH];
    LENGTH最小为237,如果你的数据长的话这个值要再大一些,至于为什么是237我也不知道
    我是从261一个一个试下来得知的,
    不知是否有高手可以告诉我是为什么
      

  2.   

    首先你确定注册表的键值是对的了?那要先调用一便注册表读的函数,不要带要读到什么地方,
    然后就会得到本键值的大小,然后带入参数,就会按照键值的大小得到数据,旧不会有烫了!!要是再不明白给我发邮件!! [email protected]
      

  3.   

    win2k就是用烫,而不是用0来初始化未用的空间的。win98是0吧。
    所以你得到值后没有加0,在Win2K中这个字符串就很难结束。
    就是很长的烫烫烫烫烫烫烫烫。
    :)
    祝你好运。
      

  4.   

    hujun614(胡均):你错了。
    你去看看"烫"的内码是什么——0xCCCC。这是VC调试手段的一种。
    因为0xCC,0xCD比较少的使用,所以VC在运行调试版本的时候,分配的内存都初始话为烫烫。如果你看到你使用的内存处存在一堆的烫烫,显然,你什么地方错了,要不然,就是BT导致你刚喝了100度的开水。
      

  5.   

    你是否沒有初始化cbData = sizeof(buf), 再call
    char buf[1024];
    DWORD cbData = sizeof(buf);
    DWORD type;
    RegQueryValueEx(hkey, "Software\\ABC\\CDE", NULL, &type, buf, &cbData);
      

  6.   

    我估计你的注册表访问函数有问题,关键是没有访问到实际的数据。把存放结果的空间清零,使用memset,再试试,如果依旧,那就是你的程序有问题,前提是注册表确实存在数据。
      

  7.   

    其实这个问题并不是注册表的问题,如果注册表访问正确,那么其实这个就是数组或指针的越界问题,在用数组前你应先初始化你的数组,一般只要在a[0]=0就可以了。例如你用sprintf(……)就可以这样用。
    而且当发现此类错误时,也有是上面仁兄所提的最后没有边界的问题。当然你加上边界就可以了
    我怀疑你的问题错误的来源有三个,
    一、注册表键值读出错误。
    二、数组太小,注册表键值中的数据比你的数组要长,所以本身就越界了,从而在最后没有0
    三、如果上面都没有错误,那就是你编程不小心,错用了另外的一个没有初始化的变量。
    不知道我的分析对你有没有帮助
      

  8.   

    TO: lanzhengpeng2(兰征鹏),我当然知道是0xCCCC,如果你说调试的时候是这样,那么请问,
    在Win98下可以不注意字符串结尾的问题,但要是在Win2k下就会出现类似死循环,很久以后也
    许能继续执行,就是因为用某些API得到的字符串值后没有记住用'\0'结尾,都是Release版,
    就没有调试环境了吧,为什么还这样呢。
    要是你不相信,你也可这自已做做测试,buf[10];
    buf[8]='\0';
    AfxMessageBox(buf);
    在Win98和Win2k下,你将得到不同的结果,你相信吗?我的QQ:12953091,很高和lanzhengpeng2(兰征鹏)一起探讨VC++编程。
      

  9.   

    烫"的内码是—0xCCCC是VC调试手段的一种。
    因为0xCC,0xCD比较少的使用,所以VC在运行调试版本的时候,分配的内存都初始话为烫烫。如果你看到你使用的内存处存在一堆的烫烫
    1.其实这个问题并不是注册表的问题,
    2.其实这个就是数组或指针的越界问题,你的指针指向了另一个地方,或是操作没有成功  
    3.在用数组前你应先初始化你的数组,memset...我想这样就不会有问题了。set active config to release....