下面的代码用于在REG_MULTI_SZ类型中删除一个字符串,在VC++ Ver6.0下编译:
for(ULONG i=0;i<dwBufLen;i++)
{
pChar=StrStrI(szUpperFilters+i,StringName);
if(pChar) break;
}
if(i<dwBufLen) //found
{
MoveMemory(pChar,pChar+DriverLen+1, dwBufLen-DriverLen-(pChar-szUpperFilters)+2);
DataLen = dwBufLen-DriverLen-1;
CopyMemory(szBuffer,szUpperFilters,DataLen);
}
szBuffer中的结果:
Debug版本: 正确
Release版本:
由于VC的优化功能,会使
MoveMemory(pChar,pChar+DriverLen+1, dwBufLen-DriverLen-(pChar-szUpperFilters)+2);
DataLen = dwBufLen-DriverLen-1;
CopyMemory(szBuffer,szUpperFilters,DataLen);
优化为:
DataLen = dwBufLen-DriverLen-1;
CopyMemory(szBuffer,szUpperFilters,DataLen);
MoveMemory(pChar,pChar+DriverLen+1, dwBufLen-DriverLen-(pChar-szUpperFilters)+2);
因而出现了错误!