2017-02-11 15 views
-2

Я работаю над извлечением значения реестра типа REG_SZ и использую его как массив символов, я попытался принять вход в буфер * байта, но еще не смог его получить в массиве символов., используя 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 * buffer to char * var или string str, то тоже он решит мою проблему

+1

Добро пожаловать в переполнение стека. Пожалуйста, найдите время, чтобы прочитать [The Tour] (http://stackoverflow.com/tour) и обратитесь к материалу из [Справочного центра] (http://stackoverflow.com/help/asking) о том, что и как вы можете спросите здесь. –

+0

Покажите нам подробную информацию о конкретном значении реестра, с которым вы пытаетесь работать, и код, который вы пытались использовать для доступа к нему. Тогда кто-то может помочь вам в том, что вам нужно сделать. – TheUndeadFish

ответ

0

Код, который вы опубликовали, является неполным и не компилируется, и вы не проверяете возвращаемое значение из RegQueryValueEx!

Разница между BYTE* и char* не является проблемой, и вы можете просто отличить ее от char *, потому что они как массивы размером в байт, так и вы не заботитесь о знаке.

Вы обычно не выделяют массив BYTE при чтении из реестра, вы выделяете тип вы читаете и просто бросили при вызове функции:

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!

Даже если вы делаете все, что у вас все еще есть проблемы, потому что прочитанная строка не может быть \ 0 завершена. Вы должны вручную завершить или использовать вместо этого RegGetValue.

 Смежные вопросы

  • Нет связанных вопросов^_^