0

我一直在关注 MSDN 关于枚举注册表子项的示例。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724256%28v=vs.85%29.aspx

在下面的代码中,我不明白为什么achValue[0] = '\0';是必要的。我运行了一些查询 HKCU 和 HKCU\Console 的测试,结果符合预期。然后我用注释行运行相同的测试并得到相同的输出。我曾认为空终止第一个 TCHAR 会阻止 TCHAR 数组连接每个值名称 ( achValue),但这无疑是不正确的。

if (cValues) 
{
    printf( "\nNumber of values: %d\n", cValues);

    for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++) 
    { 
        cchValue = MAX_VALUE_NAME; 
        achValue[0] = '\0'; 
        retCode = RegEnumValue(hKey, i, 
            achValue, 
            &cchValue, 
            NULL, 
            NULL,
            NULL,
            NULL);

        if (retCode == ERROR_SUCCESS ) 
        { 
            _tprintf(TEXT("(%d) %s\n"), i+1, achValue); 
        } 
    }
}

另外,为什么 TCHAR 数组在块中仅以空结尾cValues ifachKeyMSDN 示例块中的 TCHAR 数组cSubKeys if不遵循相同的过程。

谢谢你。

4

1 回答 1

2

这个例子具有误导性。该函数不要求输入时的值以空值结尾。

您可以删除有问题的代码行。包含该行显然没有任何害处,但它是多余的。

于 2014-06-18T12:13:38.407 回答