关于memcpy处理string的问题

zfk198687 2012-06-13 07:05:23
为什么第一个程序用memcpy拷贝string后,p不为空,但指向的是空值。而第二个程序拷贝int类型的p指向的不为空?
第一个程序:

#include<iostream>
#include<string>
using namespace std;
int main()
{

string aaa = "我是谁呀?";
int len = sizeof(aaa);
char *p = new char[len];
memcpy(p ,&aaa, len);
cout<<p<<endl;
system("pause");
return 0;
}


第二个程序:

#include<iostream>
#include<string>
using namespace std;
int main()
{

int i = 333;
int len = sizeof(i);
char *p = new char[len];
memcpy(p ,&i, len);
cout<<p<<endl;
system("pause");
return 0;
}
...全文
1268 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-06-21
  • 打赏
  • 举报
回复
memcpy不能拷贝class。
zfk198687 2012-06-21
  • 打赏
  • 举报
回复
哦,对于String类型的应该是用strlen取长度,再用memcpy拷贝内存,不应该拷贝String的地址。结贴了!
无尽意 2012-06-13
  • 打赏
  • 举报
回复
改成下面比较合理

int _tmain(int argc, _TCHAR* argv[])
{
char *aaa = "我是谁呀?";
int len = strlen(aaa);
char *p = new char[len + 1];
p[len] = '\0';
memcpy(p ,aaa, len);
cout<<p<<endl;
system("pause");

return 0;
}
jackyjkchen 2012-06-13
  • 打赏
  • 举报
回复
string别用memcpy,即便你碰巧用对了也不跨平台,只是凑巧撞上了某种实现的string
石头翔子 2012-06-13
  • 打赏
  • 举报
回复
memcpy 是对内存的拷贝。
它不关心你拷的是什么东西,而只负责把你给定的源地址的内容,拷到目的地址中。

第一个程序,将string对象拷贝到p,但你得注意,String对象的内容,并非仅仅是字符串,它还有些其它的对象相关的属性。你可以打印一下len值,它不是字符串长度的。

第二个程序,同样的,它将i地址指向的内容,拷贝到p中。
qq120848369 2012-06-13
  • 打赏
  • 举报
回复
类对象不是那么简单的几个字符构成的.

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧