小弟想把下面的 FindReg 函数转成非递归,函数挺简单除了有while循环。也参考了二叉树和数据结构的一些例子,无奈功力不够还是不会下手。大家给点思路吧。#include "stdafx.h"
#include "windows.h"long FindReg(HKEY RootReg, char* KeyName);int main(int argc, char* argv[])
{
//printf("Hello World!\n");
FindReg(HKEY_LOCAL_MACHINE, "Software\\Policies");
return 0;
}long FindReg(HKEY RootReg, char* KeyName)
{
HKEY hk;
DWORD SubCnt,SubLen,ln,i,err;
char buf[255];
char* s;

err = RegOpenKeyEx(RootReg, KeyName, 0, KEY_READ, &hk);
if (err == 0) {
err = RegQueryInfoKey(hk, NULL, NULL, NULL, &SubCnt, NULL, NULL, NULL, NULL, NULL, NULL, NULL);

if ((err == 0) && (SubCnt > 0)) {
i= 0;
while (i < SubCnt) {
SubLen = 256;
RegEnumKeyEx(hk, i, buf, &SubLen, NULL, NULL, NULL, NULL);
i += 1;
ln = strlen(KeyName) + SubLen + 2;
s = new char[ln];
sprintf(s, "%s\\%s", KeyName, buf);
printf("%s\n", s);        // test
// Proc(s)       /* 处理子键 s 的函数

FindReg(RootReg, s);          // 如何把递归转成非递归??
delete[] s;
}
}

RegCloseKey(hk);
}
return err;
}

解决方案 »

  1.   

    用栈倒是可以,但是代码要复杂的多,并且不易读,想不出为啥lz要用非递归的,也许是想多弄清一些东西。
    给你一个例子,你看一下:
    http://c.chinaitlab.com/c/basic/200806/752157.html
      

  2.   

    算了,我大概想了下,注册表结构也不大复杂,level最大一般在八九以内,用递归也是可以接受。结帐。