小弟想把下面的 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;
}
#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;
}
给你一个例子,你看一下:
http://c.chinaitlab.com/c/basic/200806/752157.html