这篇 MSDN文章旨在演示如何删除具有子键的注册表键,但代码存在缺陷。
代码中的一行:
StringCchCopy (lpEnd, MAX_PATH*2, szName);
导致异常,原因是尝试复制超出lpEnd缓冲区的范围。我尝试通过用以下内容替换该行来纠正解决方案
size_t subKeyLen = lstrlen(lpSubKey);
size_t bufLen = subKeyLen + lstrlen(szName)+1;
LPTSTR buf = new WCHAR[bufLen];
StringCchCopy(buf,bufLen,lpSubKey);
StringCchCopy(buf+subKeyLen,lstrlen(szName)+1,szName);
buf[bufLen-1]='\0';
由于目标平台和开发平台不同,我无法逐步执行代码,但从我放置在代码中的日志来看,它似乎只是冻结了,但没有抛出异常。
令人沮丧的是 MSDN 文章是错误的...你会认为它们会被检查。
有什么想法可以纠正这个问题吗?
谢谢。
StringCchCopy(lpEnd, MAX_PATH * 2 - (lpEnd - lpSubKey), szName)
,或者更简单一些,*lpEnd = 0; StringCchCat(lpSubKey, MAX_PATH * 2, szName)
。 - Raymond Chen