MSDN说RegEnumValue得到的字符串数据
如果数据具有REG_SZ、REG_MULTI_SZ或REG_EXPAND_SZ类型,则
字符串可能没有以正确的空结尾存储
角色。因此,即使函数返回ERROR\u SUCCESS
应用程序应确保字符串正确终止
在使用它之前;否则,它可能会覆盖缓冲区。(注意
REG_MULTI_SZ字符串应该有两个空终止字符。)
假设一个值是REG_MULTI_SZ,这是否意味着序列中的每个字符串都可以或不能以空结尾,或者仅仅表示最后一个双空结尾符可能不存在,但所有内部空结尾符都存在?
最佳答案
假设一个值是REG_MULTI_SZ,这是否意味着序列中的每个字符串都可以或不能以空结尾
序列中的字符串必须以空结尾,否则将无法确定其中一个字符串的结尾和下一个字符串的开头。从Registry Value Types描述REG_MULTI_SZ
:
A sequence of null-terminated strings, terminated by an empty string (\0). The following is an example: String1\0String2\0String3\0LastString\0\0 The first \0 terminates the first string, the second to the last \0 terminates the last string, and the final \0 terminates the sequence. Note that the final terminator must be factored into the length of the string.
The documentation is vague but my interpretation is that the last null terminators may be missing:
String1\0String2\0String3\0LastString
读取该值的代码必须确保它们存在于后续字符串提取中。
如果用于包含该值的缓冲区足够大,包括用于终止空字符的空间,只要代码确保存在尾随的空字符,就无需担心。