使用这个函数,返回值是0,但是获取到的键值只是字符串的第一个字母。这是为什么?谢谢。急求答案。
int _tmain(int argc, _TCHAR* argv[])
{
const int MAX_BUFFER_LEN = 80;
char szBuffer[MAX_BUFFER_LEN];
DWORD dwNameLen;
dwNameLen = MAX_BUFFER_LEN;
TCHAR aa[800];
if (!GetUserName(aa, &dwNameLen)) //得到计算机用户名
{
return 1;
}
HKEY hKEY;//定义有关的hKEY,在查询结束时要关闭
//打开与路径 data_Set相关的hKEY
LPCTSTR data_Set = _T("Software\\Platformbaseinfo\\AppUrl\\");
//访问注册表,hKEY则保存此函数所打开的键的句柄
long ret0 = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_READ, &hKEY));
if (ret0 != ERROR_SUCCESS)//如果无法打开hKEY,打开指定注册表失败,则中止程序的执行,
{
return 1;
}
//查询有关的数据
LPBYTE addr_Get = new BYTE[1024];//定义
DWORD type_1 = REG_SZ;//定义数据类型
DWORD cbData_1 = 1024;//定义数据长度
long ret1 = ::RegQueryValueEx(hKEY, aa, NULL, &type_1, addr_Get, &cbData_1);
if (ret1 != ERROR_SUCCESS)
{
return 1;
}
//得到注册表中地址信息
delete[] addr_Get;
//关闭打开的hKEY
::RegCloseKey(hKEY);
return 0;
}
该段代码中要获取数据的变量就是addr_Get,但是这个变量只读取到键值字符串的第一个字母,这个是为啥?
解答:
代码改为 红色部分为改动。
int _tmain(int argc, _TCHAR* argv[])
{
const int MAX_BUFFER_LEN = 80;
char szBuffer[MAX_BUFFER_LEN];
DWORD dwNameLen;
dwNameLen = MAX_BUFFER_LEN;
TCHAR aa[80];
if (!GetUserName(aa, &dwNameLen)) //得到计算机用户名
{
return 1;
}
HKEY hKEY;//定义有关的hKEY,在查询结束时要关闭
//打开与路径 data_Set相关的hKEY
LPCTSTR data_Set = _T("Software\\Platformbaseinfo\\AppUrl\\");
//访问注册表,hKEY则保存此函数所打开的键的句柄
long ret0 = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_READ, &hKEY));
if (ret0 != ERROR_SUCCESS)//如果无法打开hKEY,打开指定注册表失败,则中止程序的执行,
{
return 1;
}
//查询有关的数据
//LPBYTE addr_Get = new BYTE[1024];//定义
TCHAR addr_Get[500];
DWORD type_1 = REG_SZ;//定义数据类型
DWORD cbData_1 = 1024;//定义数据长度
long ret1 = ::RegQueryValueEx(hKEY, aa, NULL, &type_1, (LPBYTE)addr_Get, &cbData_1);
if (ret1 != ERROR_SUCCESS)
{
return 1;
}
//得到注册表中地址信息
//关闭打开的hKEY
::RegCloseKey(hKEY);