このソース コードにはいくつかの問題があります。
まず第一に、スタック上の変数であるローカル変数を持つ関数があり、その変数のアドレスを返しますが、関数が戻ると、変数は消え、アドレスは無効になります。
次の問題は、文字列を比較していないことです。代わりに、関数によって返されたアドレスを比較しています。運が良ければ、アドレスは同じである可能性があります。関数を 2 回続けて呼び出しているため、幸運にもアドレスが同じになります。
次のことをお勧めします: (1) 関数を呼び出している関数内に 2 つのローカル文字列を作成しGetRegistry()、(2) 関数を変更してGetRegistry()、独自のバッファーではなくそれらのバッファーを使用するようにします。したがって、コードは次のようになります。
char registryEntryOne[1024];
char registryEntryTwo[1024];
DWORD dwRegistryEntryOneLen;
DWORD dwRegistryEntryTwoLen;
registryEntryOne[0] = 0;   // init the registry entry to zero length string
registryEntryTwo[0] = 0;
dwRegistryEntryOneLen = sizeof(registryEntryOne);
GetRegistry ("First", registryEntryOne, &dwRegistryEntryOneLen);
dwRegistryEntryTwoLen = sizeof(registryEntryTwo);
GetRegistry ("Second", registryEntryTwo, &dwRegistryEntryTwoLen);
// two strings are equal if:
//   the lengths are the same
//   at least one of the lengths is non-zero
//   the bytes are the same in the same order
if (dwRegistryEntryOneLen && dwRegistryEntryOneLen == dwRegistryEntryTwoLen && memcmp (registryEntryOne, registryEntryTwo, dwRegistryEntryOneLen) == 0) {
    // strings are equal
} else {
    // strings are not equal
}
GetRegistry() 関数は次のようになります。
char* GetRegistry(char* StringName, char *valueBuffer, DWORD *value_length)
{
    DWORD dwType = REG_SZ;
    HKEY hKey = 0;
    const char* subkey = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\MCI\\Player";
    RegOpenKey(HKEY_LOCAL_MACHINE,subkey,&hKey);
    RegQueryValueEx(hKey, StringName, NULL, &dwType, (LPBYTE)valueBuffer, value_length);
    return  valueBuffer;
}