首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RegEnumValue和REG_MULTI_SZ型

RegEnumValue和REG_MULTI_SZ型
EN

Stack Overflow用户
提问于 2013-05-15 10:55:28
回答 2查看 876关注 0票数 1

关于RegEnumValue获得的字符串数据,

如果数据具有REG_SZ、REG_MULTI_SZ或REG_EXPAND_SZ类型,则字符串可能没有使用正确的空终止字符存储。因此,即使函数返回ERROR_SUCCESS,应用程序也应该确保字符串在使用它之前被正确终止;否则,它可能会覆盖缓冲区。(请注意,REG_MULTI_SZ字符串应该有两个空终止字符。)

假设一个值是REG_MULTI_SZ,这是否意味着序列中的每个字符串都可以或不能为空终止,或者仅仅表示只有最后一个双空终止符可能不存在,但所有内部空终止符都存在?

EN

回答 2

Stack Overflow用户

发布于 2013-05-15 11:00:10

你得照顾好最后一个终结者。只需检查它是否在那里。

票数 1
EN

Stack Overflow用户

发布于 2013-05-15 12:44:58

在处理C字符串的程序中,这是一个非常常见的错误,它们很容易使用strlen()或wcslen()来测量字符串长度,并将其作为RegSetValueEx()的RegSetValueEx参数传递。忘记了零终结者,那些与世隔绝的虫子是猖獗的。Windows并不在意,它只是写字节,不尝试解释字符串。

所以问题是,当您读取注册表值时,您将得到没有零终止符的字节。如果您再次将它解释为C字符串,那么在使用调试分配器时,您只会看到实际字符串的概率为0.4%,而不可能看到实际的字符串。你只需自己写“零终结者”就可以避免它。如果它已经存在了,那么没关系,模块化一个可能的缓冲区溢出,如果不是,那么您就避免了使用坏数据的程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16563208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档