﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-linux-Zhou2008-随笔分类-Windows</title><link>http://www.cppblog.com/linux-Zhou2008/category/7426.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 26 Jun 2008 10:32:55 GMT</lastBuildDate><pubDate>Thu, 26 Jun 2008 10:32:55 GMT</pubDate><ttl>60</ttl><item><title>C++ Builder6与VC 中字符串处理的区别(const)</title><link>http://www.cppblog.com/linux-Zhou2008/archive/2008/06/26/54676.html</link><dc:creator>EJ</dc:creator><author>EJ</author><pubDate>Thu, 26 Jun 2008 07:31:00 GMT</pubDate><guid>http://www.cppblog.com/linux-Zhou2008/archive/2008/06/26/54676.html</guid><description><![CDATA[对于以下字符串操作：<br>&nbsp;&nbsp;&nbsp;1、const char* tStr = "aaaaaaaa";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy((char*)tStr, "dddd"); //C++ Builder6会成功，而VC将出现异常。VC中"aaaaaaaaa"放在了常量数据段；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显然C++ Builder6不是，这点应该不符合C++标准~~~~<br><br>&nbsp;2、std::string tStr("aaaaaaaa");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const char* pStr = tStr.c_str();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char* pStr2 = (char*)pStr;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pStr2[5] = '9';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcpy((char*)pStr, "dddd");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//以上操作在C++ Builder6与VC中均没有错误。说明tStr的构造是拷贝了"aaaaaaaa"，而不是指向"aaaaaaaaa"。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将const char*强制转换为char*后，对字符串的操作，没有受到转换之前的影响，也就是说const char*并<br>&nbsp;&nbsp;&nbsp;&nbsp; //不是把内存数据转换为常量数据，只是告诉编译器有这个约束（只是告诉程序员应该把它看成常量，<br>&nbsp;&nbsp;&nbsp; //而不是存储为常量）。也就是说，const Type* 中const是没有什么意义的，根本没有影响数据的存储。<br><br>3、char* const pStr = ...; //常指针，意义是把指针本身存放在常数据段，因而指针不可能再指向其他东西了。 
<img src ="http://www.cppblog.com/linux-Zhou2008/aggbug/54676.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linux-Zhou2008/" target="_blank">EJ</a> 2008-06-26 15:31 <a href="http://www.cppblog.com/linux-Zhou2008/archive/2008/06/26/54676.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>