2017-02-11 77 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

相關問題