问题的引发
在学习序列化和反序列化的时候,使用memcpy进行复制操作。首先介绍memcpy函数的参数:
void *memcpy(void *dest, void *src, unsigned int count);
//第一个参数是要复制的空间的首地址
//第二个参数是要进行复制的空间的首地址
//要复制的字节数
/*下面这段代码就包含了我遇到的问题*/
string str1 = "1212";
int len = str1.size();
string str2;
char *sendBuf = new char[100];
char *recvBuf = new char[100];
/*
下面的代码运行得不到想要的结果,主要是因为string是封装的一个类,我们要写入的空间的首地址并不能用string对象的地址类表示,
和char*还是有区别的,这里如果用char*进行操作就不会有问题,还有一个函数string.c_str()返回的是一个与string对应的const char *指针
*/
memcpy(sendBuf, &str1, len);//模仿序列化可以写为memcpy(sendBuf, str1.c_str(), len)
memcpy(recvBuf, sendBuf, len);//模仿网络传输
memcpy(&str2, recvBuf, len);//模仿反序列化,这里只能先用char *变量进行接收,然后传给string变量
cout << "str2" << str2 << endl;
vector<int> vec = { 1, 2, 3, 4, 5 };
cout << "&vec" << &vec << endl;
cout << "&vec[0]" << &vec[0] << endl;
//这里要留意的是vector并不能表示数组的首地址,如果要表示写入空间的首地址
//应该用&am