Запись в реестре с использованием VC ++, повреждение данных - PullRequest
0 голосов
/ 24 марта 2010

Я хочу установить системное время в реестре, я так и сделал. Но некоторые нулевые символы только попадают туда.

когда я даю данные LPCTSTR = TEXT ("24/3/2010 \ 0");

LONG setRes = RegSetValueEx (hkey, value, 0, REG_SZ, (LPBYTE) data, 100));

успешно добавлено в реестр

Как отследить проблему

Если возможно, проверьте мой код

 #include<Windows.H>
 #include<TCHAR.H>
 #include<iostream>

 void Regkey::create_Registry()
 {
 HKEY   hkey;
 DWORD  dwDisposition,lpData;

 SYSTEMTIME time;
 GetLocalTime( &time );
 int hour = time.wHour;

 if (hour > 12) hour -= 12;
 char szData[20];
 sprintf (szData, "%02d/%02d/%04d", time.wDay, time.wMonth, time.wYear);

 if(RegCreateKeyEx(HKEY_LOCAL_MACHINE, TEXT("Software\\Sijith\\Test"), 0, NULL, 0, 0, NULL, &hkey, &dwDisposition)==ERROR_SUCCESS)

  {
  LPCTSTR sk = TEXT("Software\\Sijith\\Test");
   LONG openRes = RegOpenKeyEx(HKEY_LOCAL_MACHINE, sk, 0, KEY_ALL_ACCESS , &hkey); 
    LPCTSTR value = TEXT("CheckSoftwareKey");
    LONG setRes = RegSetValueEx (hkey, value, 0, REG_SZ, (CONST BYTE *)szData,                         sizeof(TCHAR)        * (_tcslen(szData) + 1));

            RegCloseKey(hkey);
    }

    }

выход

имя значения: CheckSoftwareKey

valueData: 㐲 〯 ⼳ 〲 〱

1 Ответ

0 голосов
/ 24 марта 2010

Изменение

char szData[20];
sprintf (szData, "%02d/%02d/%04d", time.wDay, time.wMonth, time.wYear); 

до

TCHAR szData[20];
_stprintf_s (szData, _countof(szData), _TEXT("%02d/%02d/%04d"), time.wDay, time.wMonth, time.wYear); 
...