2017-02-11 41 views
-2

我正在努力提取REG_SZ类型的注册表值并将其用作字符数组我试图在字节*缓冲区中输入输入,但进一步无法获取它在char数组中。使用RegQueryValueEx将reg_sz作为输入,并将其作为字符数组使用

BYTE* buffer = new BYTE[cbMaxValueData]; 
ZeroMemory(buffer, cbMaxValueData); 
buffer[0] = '\0'; 

LONG dwRes = RegQueryValueEx(hKey, oem_name, 0, NULL, buffer, &lpData); 

_tprintf(TEXT("(%d) %s: %s\n"), i+1, oem_name, buffer); 

我想是提取缓冲区中的每个字符,但我不觉得任何方式: PS:在我的注册表键值为REG_SZ类型

基本的,如果有人可以帮助我在转换BYTE *缓冲区char * var或字符串str然后它也将解决我的问题

+1

欢迎来到Stack Overflow。请花些时间阅读[The Tour](http://stackoverflow.com/tour),并参阅[帮助中心](http://stackoverflow.com/help/asking)中的资料,了解您可以在这里问。 –

+0

向我们展示您尝试使用的特定注册表值的详细信息以及您尝试访问该代码的所有代码。然后有人可能会给你更好的帮助,你需要做什么。 – TheUndeadFish

回答

0

您发布的代码是不完整的,并且不会编译,并且您没有检查RegQueryValueEx的返回值!

BYTE*char*之间的区别是没有问题的,你可以只投为char *,因为他们都只有一个字节大小的数组,你不关心的迹象。

从注册表中读取数据时,您通常不分配一个字节数组,你分配你正在阅读和调用函数时只投类型:有固定大小的缓冲区

TCHAR buffer[100]; 
DWORD size = sizeof(buffer); 
LONG result = RegQueryValueEx(hKey, oem_name, 0, NULL, (BYTE*) buffer, &size); 
if (ERROR_SUCCESS == result) _tprintf(....); else printf("Error %u\n", result); 

,但这样的代码通常是不够的。如果您正在读取未知数据,则应该在循环中调用RegQueryValueEx。首先用一个NULL缓冲区来获得大小,然后再分配和再次调用。您需要一个循环,因为其他人可能会增加两次对RegQueryValueEx的调用之间的数据大小!

即使你所做的一切仍然有问题需要处理,因为你读的字符串可能不会被终止。您必须手动终止或使用RegGetValue

相关问题