在使用memcpy往string和vector中复制数据时引发的问题

在学习序列化和反序列化过程中,遇到memcpy使用问题。文章指出,尽管STL类如string和vector可替代简单数据结构,但不能直接像处理基本类型一样处理它们。memcpy在复制这类对象时可能会因它们的封装结构复杂而引发错误,特别是在涉及到map等复杂数据结构时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题的引发

在学习序列化和反序列化的时候,使用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值