首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于memcpy处理string的有关问题

2012-06-22 
关于memcpy处理string的问题为什么第一个程序用memcpy拷贝string后,p不为空,但指向的是空值。而第二个程序

关于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;} 

热点排行