c - 存储在注册表中的字符串值如何不以 null 结尾?

标签 c windows string registry

Documentation for function RegQueryValueEx 说的是

If the data has the REG_SZ, REG_MULTI_SZ or REG_EXPAND_SZ type, the string may not have been stored with the proper terminating null characters.

我的问题是:根据该陈述,如果我们在 Windows 注册表项中有一个字符串值,那么在什么情况下该字符串会被正确终止,以及在什么情况下该字符串会被正确终止。不会是?非空终止的字符串注册表值是否有效且可由系统 native 使用?

在注册表级别,我们可以采取什么措施来确保一旦 RegQueryValueEx 函数读取该字符串,该字符串就会在程序中正确终止?

我的猜测是,此警告仅适用于以编程方式插入值的情况,而不是通过 Windows 注册表编辑器手动添加值的情况,在这种情况下,字符串肯定会以 null 结尾,对吗?

请注意,文档还提到函数 RegGetValue 可用于确保正确终止字符串,但这不是我的问题。

最佳答案

RegSetValueEx 的文档中:

cbData [in]

The size of the information pointed to by the lpData parameter, in bytes. If the data is of type REG_SZ, REG_EXPAND_SZ, or REG_MULTI_SZ, cbData must include the size of the terminating null character or characters.

它没有说明如果 cbData 不包含终止 null 会发生什么,但人们可以猜测它会导致您所描述的情况。

关于c - 存储在注册表中的字符串值如何不以 null 结尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32191165/

相关文章:

c - C 中的 x509 证书验证

c - SSE _mm_load_pd 在 _mm_store_pd 段错误时工作

c# - 主机文件编辑需要很长时间才能工作?

php - 从 mysql 加载字符串作为 xml

c - 没有 strtod/sprintf 的 float 转换

c - 为什么我的二进制输出与预期输出不同?

c - 使用fgets读取文件

c++ - strftime %F 在 Windows 上不起作用

c - 如何读取远程 INI 文件

python - 如何减少字符分隔字符串的大小?