设为首页 加入收藏

TOP

Linux下的string与Windows下的区别
2014-11-24 00:35:31 来源: 作者: 【 】 浏览:4
Tags:Linux string Windows 区别

同一段代码:


string str1 = "sdfsdffdf";


string str2 = str1;


单这两句是看不出有什么区别的,但在不同系统下区别已经开始了!


分别打印string的存储数据的地址:


const char *p1 = str1.c_str();


const char *p2 = str2.c_str();


cout.unsetf( ios_base::dec );


cout.setf( ios_base::hex );


cout<<(int)p1< cout<<(int)p2< 现在区别明显了!


在Windows下输出是:


12ff4c


12ff14


在Linux下输出是:


2830104c


2830104c


现在看到区别了吧!在Linux下两个不同的字符串竟然是指向同一块内存,而Windows下是指向不同的内存!也就是说Windows下的是真正意义上的两个string字符串。而Linux的不是真正意义上的字符串?


为验证这点,在Linux下,在程序里面加多个下面这句:


transform (str2.begin(), str2.end(), str2.begin(), (int(*)(int))tolower); // #include


然后在输出指针所指的地址来看看:


cout<<(int)p1< cout<<(int)p2< 惊人的结果是:


2830104c


2830106c


对比一下前面的输出,发现第二个字符串的地址变了,什么时候变的?


经过实验发现,原来Linux下的string模板有点奸诈!比如对于最上面的两句程序,它会发现你并没有对strS2进行了实质性的操作,因为程序只是打印了一下地址而已,所以它就不给strS2分配空间来保存strS1的字符串!但它把strS2的指针指向了strS1的地址空间了!有点变态了。但如果在程序后面加多个对strS2进行操作的transform函数后会发现,系统给strS2分配了空间!对于这个本人有点郁闷,因为我写个C的函数对strS2进行操作,系统没给strS2分配空间!只能是g++在对strS2的空间分配的判断上,只能根据C++的操作函数,发现有使用了,然后才分配空间!


据说Linux下的这个特性是为了提高程序运行速度的!好像是。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux下多语言开发 下一篇centos5.1下编译Linux内核

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: