关于memcpy处理string的问题
为什么第一个程序用memcpy拷贝string后,p不为空,但指向的是空值。而第二个程序拷贝int类型的p指向的不为空?
第一个程序:
- C/C++ code
#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;}
第二个程序:
- C/C++ code
#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;}
[解决办法]
类对象不是那么简单的几个字符构成的.
[解决办法]
memcpy 是对内存的拷贝。
它不关心你拷的是什么东西,而只负责把你给定的源地址的内容,拷到目的地址中。
第一个程序,将string对象拷贝到p,但你得注意,String对象的内容,并非仅仅是字符串,它还有些其它的对象相关的属性。你可以打印一下len值,它不是字符串长度的。
第二个程序,同样的,它将i地址指向的内容,拷贝到p中。
[解决办法]
string别用memcpy,即便你碰巧用对了也不跨平台,只是凑巧撞上了某种实现的string
[解决办法]
改成下面比较合理
- C/C++ code
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;}