下面有三种情况只能替换内容 或者追加内容 ,却不能直接删除或者完全换成我的内容。
不明白这是什么原因呢
BOOL WINAPI CWininetHook::_InternetReadFile( __in HINTERNET hFile,__out LPVOID lpBuffer,__in DWORD dwNumberOfBytesToRead,__out LPDWORD lpdwNumberOfBytesRead )
{
BOOL isBool=s_pfnInternetReadFile(hFile,lpBuffer,dwNumberOfBytesToRead,lpdwNumberOfBytesRead );
CStringA str((char*)lpBuffer);
// str="1231333333333"; //新内容等于1231333333333加原来的数据lpBuffer。不是应该等于1231333333333吗?
// str="";//内容没有变化
str.Replace("123","456");//可以成功替换
char* pChar=(char*)lpBuffer;
memset(pChar,0,sizeof(pChar));
strcpy(pChar,str);
return isBool;
}
5 个解决方案
#1
内存弄错了吧?
#2
但是替换却可以成功啊。
#3
替换可以,但是不能替换所有内容?是不是大小计算有问题
#4
// str="1231333333333"; //新内容等于1231333333333加原来的数据lpBuffer。不是应该等于1231333333333吗?
肯定不是,因为CString的字符串所指的空间不是lpBuffer所指的空间,只是把lpBuffer所指空间的数据复制到CString而已
memset(lpBuffer,0,dwNumberOfBytesToRead)
其实你可以用类似的方法strcpy_s((char*)lpBuffer,dwNumberOfBytesToRead-1,"1231333333333");
肯定不是,因为CString的字符串所指的空间不是lpBuffer所指的空间,只是把lpBuffer所指空间的数据复制到CString而已
memset(lpBuffer,0,dwNumberOfBytesToRead)
其实你可以用类似的方法strcpy_s((char*)lpBuffer,dwNumberOfBytesToRead-1,"1231333333333");
#5
谢谢,这样可以完全替换掉了,但是又出现令一个问题。页面上显示好几个"1231333333333"。每调用一次InternetReadFile "1231333333333" 就会多一个,不明白上面不是已经用memset清空了吗 怎么数据还会叠加呢
#1
内存弄错了吧?
#2
但是替换却可以成功啊。
#3
替换可以,但是不能替换所有内容?是不是大小计算有问题
#4
// str="1231333333333"; //新内容等于1231333333333加原来的数据lpBuffer。不是应该等于1231333333333吗?
肯定不是,因为CString的字符串所指的空间不是lpBuffer所指的空间,只是把lpBuffer所指空间的数据复制到CString而已
memset(lpBuffer,0,dwNumberOfBytesToRead)
其实你可以用类似的方法strcpy_s((char*)lpBuffer,dwNumberOfBytesToRead-1,"1231333333333");
肯定不是,因为CString的字符串所指的空间不是lpBuffer所指的空间,只是把lpBuffer所指空间的数据复制到CString而已
memset(lpBuffer,0,dwNumberOfBytesToRead)
其实你可以用类似的方法strcpy_s((char*)lpBuffer,dwNumberOfBytesToRead-1,"1231333333333");
#5
谢谢,这样可以完全替换掉了,但是又出现令一个问题。页面上显示好几个"1231333333333"。每调用一次InternetReadFile "1231333333333" 就会多一个,不明白上面不是已经用memset清空了吗 怎么数据还会叠加呢