﻿<?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++博客-网络服务器软件开发-随笔分类-C++基础</title><link>http://www.cppblog.com/true/category/3840.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 20 May 2008 15:20:10 GMT</lastBuildDate><pubDate>Tue, 20 May 2008 15:20:10 GMT</pubDate><ttl>60</ttl><item><title>没有找到MSVCR80D.dll[转]</title><link>http://www.cppblog.com/true/archive/2007/11/17/36779.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Fri, 16 Nov 2007 17:37:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2007/11/17/36779.html</guid><wfw:comment>http://www.cppblog.com/true/comments/36779.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2007/11/17/36779.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/36779.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/36779.html</trackback:ping><description><![CDATA[问题描述：大部分的vs.net&nbsp;2005的用户在新建&#8220;win32项目－windows应用程序&#8221;的时候，新建的工程都通不过去，出现如下提示：<br>Solution&nbsp;to&nbsp;&#8220;MSVCR80D.dll&nbsp;not&nbsp;found&#8221;&nbsp;by&nbsp;hua.<br>&#8220;没有找到MSVCR80D.dll，因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。&#8221;的完美解决方案^_^感觉偶做的还不错<br><br>问题所在：由于vs.net&nbsp;2005&nbsp;采用了一种新的DLL方案，搞成一个exe还要配有一个manifest文件（一般在嵌入文件里了，所以看不到，不过也可以不嵌入，这样会生产一个&lt;程序名&gt;.exe.manifest的文件，没它exe自己就转不了了：）这是个新功能，微软弄了个新工具（mt.exe），结果不好用，好像是fat32下时间戳有问题（在ntfs下这个问题就没有了），搞得manifest有时嵌入不到exe中（默认配置是嵌入的，所以就报错找不到dll了。<br><br>解决方案（3个都可以，由以第3个最帅，我做的：）：<br>1．&nbsp;&nbsp;&nbsp;&nbsp;微软对于这个问题应该也有处理，不过感觉不是很人性化。在&#8220;属性-&gt;配置属性-&gt;清单工具-&gt;常规&#8220;下有一个&#8221;使用FAT32解决办法，把它选成是，就可以了。（注意：一定要先配置这个选项，然后再编译工程，要不然还是不好用：）<br>2．&nbsp;&nbsp;&nbsp;&nbsp;找到你的工程的文件夹，如（myproject），找到其下的myproject\myproject\Debug\&nbsp;myproject.rec，把它删掉（删掉整个Debug目录也可以），重新编译，搞定！<br>3．&nbsp;&nbsp;&nbsp;&nbsp;本解决方案是俺独创的，感觉爽多了，可以直接再应用向导中配置，严重符合高级人机界面要求：）好，<br>1）&nbsp;&nbsp;&nbsp;&nbsp;首先找到你的vs.net安装目录（如我的是E:\Program&nbsp;Files\Microsoft&nbsp;Visual&nbsp;Studio&nbsp;8），定位到Microsoft&nbsp;Visual&nbsp;Studio&nbsp;8\VC\VCWizards\AppWiz\Generic\Application文件夹，备份这个Application文件夹，不然一会你自己改咂了我可不管啊：）。<br>2）&nbsp;&nbsp;&nbsp;&nbsp;打开html\2052，看到两个文件了吧，就那个AppSettings.htm了，这个管着你的那个配置向导的界面，用UE(不要告诉我你不知道ue啥东西，baidu&nbsp;it)打开，在266行&#8220;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/SPAN&gt;&#8221;后回车，然后插入一下内容：<br>&lt;!--&nbsp;this&nbsp;(hua)section&nbsp;is&nbsp;added&nbsp;by&nbsp;HUA.&nbsp;--&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span&nbsp;class="itemTextTop"&nbsp;id="FILE_SYSTEM_SPAN"&nbsp;title=""&gt;选择你所使用的文件系统:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;P&nbsp;CLASS="Spacer"&gt;　&lt;/P&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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;&lt;INPUT&nbsp;TYPE="radio"&nbsp;CLASS="Radio"&nbsp;checked&nbsp;onPropertyChange=""&nbsp;NAME="filesystem"&nbsp;ID="FAT32"&nbsp;ACCESSKEY="F"&nbsp;TITLE="FAT32"&gt;<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;&lt;DIV&nbsp;CLASS="itemTextRadioB"&nbsp;ID="FAT32_DIV"&nbsp;TITLE="FAT32"&gt;<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;&lt;LABEL&nbsp;FOR="FAT32"&nbsp;ID="FAT32_LABEL"&gt;FAT32(&lt;U&gt;F&lt;/U&gt;)&lt;/LABEL&gt;<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;&lt;/DIV&gt;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;BR&gt;<br><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;&lt;INPUT&nbsp;TYPE="radio"&nbsp;CLASS="Radio"&nbsp;onPropertyChange=""&nbsp;NAME="filesystem"&nbsp;ID="NTFS"&nbsp;ACCESSKEY="N"&nbsp;TITLE="NTFS"&gt;<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;&lt;DIV&nbsp;CLASS="itemTextRadioB"&nbsp;ID="NTFS_DIV"&nbsp;TITLE="NTFS"&gt;<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;&lt;LABEL&nbsp;FOR="NTFS"&nbsp;ID="NTFS_LABEL"&gt;NTFS(&lt;U&gt;N&lt;/U&gt;)&lt;/LABEL&gt;<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;&lt;/DIV&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/span&gt;<br>&lt;!--&nbsp;end&nbsp;of&nbsp;(hua)section&nbsp;--&gt;<br>好，保存关闭，这个改完了，准备下一个。<br><br>3）&nbsp;&nbsp;&nbsp;&nbsp;打开scripts\2052，这里就一个文件，ue打开它，找到138行&#8220;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;bATL&nbsp;=&nbsp;wizard.FindSymbol("SUPPORT_ATL");&#8221;其后回车，插入如下内容：<br>//&nbsp;this&nbsp;(hua)section&nbsp;is&nbsp;added&nbsp;by&nbsp;HUA.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;MFTool&nbsp;=&nbsp;config.Tools("VCManifestTool");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MFTool.UseFAT32Workaround&nbsp;=&nbsp;true;<br>//&nbsp;end&nbsp;of&nbsp;(hua)section&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;好，继续找到210行(源文件的210，你加了上边的语句就不是210了：)&#8220;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;config&nbsp;=&nbsp;proj.Object.Configurations.Item("Release");&#8221;注意这次要在这行&#8220;前边&#8221;加如下内容：<br>//&nbsp;this&nbsp;(hua)section&nbsp;is&nbsp;added&nbsp;by&nbsp;HUA.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(bFAT32)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;MFTool&nbsp;=&nbsp;config.Tools("VCManifestTool");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MFTool.UseFAT32Workaround&nbsp;=&nbsp;true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>//&nbsp;end&nbsp;of&nbsp;(hua)section&nbsp;&nbsp;&nbsp;&nbsp;<br>好了，终于都改完了，打开你的vs.net&nbsp;2005新建一个win32应用程序看看吧，效果还不错吧：）为了这个问题，耽误了我一天的考研复习时间，希望大家能用的上。<br>另外附个国外的bbs：http://forums.microsoft.com/MSDN/default.aspx?SiteID=1<br>Msdn的，肯定不错了，上边有vs.net的开发人员活动，都是很官方的东西，大家可以看看，不过英语要够好哦：）<br>
<img src ="http://www.cppblog.com/true/aggbug/36779.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2007-11-17 01:37 <a href="http://www.cppblog.com/true/archive/2007/11/17/36779.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单体－－【来自群友】</title><link>http://www.cppblog.com/true/archive/2007/06/04/25512.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Mon, 04 Jun 2007 11:29:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2007/06/04/25512.html</guid><wfw:comment>http://www.cppblog.com/true/comments/25512.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2007/06/04/25512.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/25512.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/25512.html</trackback:ping><description><![CDATA[<p>//资源保护对象<br>class CAutoLock<br>{<br>public:<br>&nbsp;CAutoLock(){ ::InitializeCriticalSection(&amp;m_crit);}<br>&nbsp;virtual ~CAutoLock() { ::DeleteCriticalSection(&amp;m_crit); }<br>public:<br>&nbsp;void&nbsp; Lock(){&nbsp; ::EnterCriticalSection(&amp;m_crit); }<br>&nbsp;void&nbsp; UnLock(){ ::LeaveCriticalSection(&amp;m_crit); }<br>private:<br>&nbsp;CRITICAL_SECTION&nbsp; m_crit;<br>};<br>template &lt;class T&gt;<br>class SingleTon<br>{<br>public:<br>&nbsp;SingleTon(){};<br>&nbsp;~SingleTon(){ if( instance_ ) delete instance_; }<br>public:<br>&nbsp;static T* get_instance()<br>&nbsp;{<br>&nbsp;&nbsp;if( instance_ == 0 )<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;lock_.Lock();<br>&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;if( instance_ == 0 )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instance_ = new T;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;catch (...)<br>&nbsp;&nbsp;&nbsp;{</p>
<p>&nbsp;&nbsp;&nbsp;} <br>&nbsp;&nbsp;&nbsp;lock_.UnLock();<br>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;return instance_;<br>&nbsp;}</p>
<p>protected:<br>&nbsp;static CAutoLock lock_ ;<br>&nbsp;static T* instance_;<br>};</p>
<p><br>template &lt;class T&gt;<br>CAutoLock SingleTon&lt;T&gt;::lock_;<br>template&lt;class T&gt;<br>T* SingleTon&lt;T&gt;::instance_;</p>
<img src ="http://www.cppblog.com/true/aggbug/25512.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2007-06-04 19:29 <a href="http://www.cppblog.com/true/archive/2007/06/04/25512.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>fstream的使用</title><link>http://www.cppblog.com/true/archive/2007/05/27/24938.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Sun, 27 May 2007 10:57:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2007/05/27/24938.html</guid><wfw:comment>http://www.cppblog.com/true/comments/24938.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2007/05/27/24938.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/24938.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/24938.html</trackback:ping><description><![CDATA[<font color=#0000ff>#include</font> <font color=maroon>&lt;iostream&gt;</font><br><font color=blue>#include</font> <font color=maroon>&lt;fstream&gt;</font><br><font color=blue>using</font> <font color=blue>namespace</font> std;<br><br><font color=blue>#ifdef</font> WIN32<br><font color=blue>#define</font> TEST_FILE&nbsp;&nbsp; <font color=maroon>"c:\\tmp\\test.txt"</font><br><font color=blue>#else</font><br><font color=blue>#define</font> TEST_FILE&nbsp;&nbsp; <font color=maroon>"/tmp/test.txt"</font><br><font color=blue>#endif</font><br><br><font color=blue>void</font> test<font color=black>(</font><font color=black>)</font><br><font color=black>{</font><br>&nbsp;&nbsp;&nbsp; <font color=black>{</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=green>//fstream sfs;</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=green>//sfs.open(TEST_FILE, ios_base::out);</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fstream sfs<font color=black>(</font>TEST_FILE, ios_base<font color=black>:</font><font color=black>:</font>out<font color=black>)</font>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>char</font> buf<font color=black>[</font><font color=black>]</font> <font color=black>=</font> <font color=maroon>"1234567890"</font>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sfs.write<font color=black>(</font>buf, <font color=blue>sizeof</font><font color=black>(</font>buf<font color=black>)</font><font color=black>)</font>;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sfs.close<font color=black>(</font><font color=black>)</font>;<br>&nbsp;&nbsp;&nbsp; <font color=black>}</font><br><br>&nbsp;&nbsp;&nbsp; <font color=black>{</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>int</font> len;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>char</font><font color=black>*</font> buf;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=green>//fstream sfs;</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=green>//sfs.open(TEST_FILE);</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fstream sfs<font color=black>(</font>TEST_FILE<font color=black>)</font>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sfs.seekg <font color=black>(</font><font color=maroon>0</font>, ios<font color=black>:</font><font color=black>:</font>end<font color=black>)</font>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; len <font color=black>=</font> sfs.tellg<font color=black>(</font><font color=black>)</font>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sfs.seekg <font color=black>(</font><font color=maroon>0</font>, ios<font color=black>:</font><font color=black>:</font>beg<font color=black>)</font>;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buf <font color=black>=</font> <font color=blue>new</font> <font color=blue>char</font><font color=black>[</font>len<font color=black>]</font>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sfs.read<font color=black>(</font>buf, len<font color=black>)</font>;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout <font color=black>&lt;</font><font color=black>&lt;</font> buf <font color=black>&lt;</font><font color=black>&lt;</font> endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=blue>delete</font> <font color=black>[</font><font color=black>]</font>buf;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sfs.close<font color=black>(</font><font color=black>)</font>;<br>&nbsp;&nbsp;&nbsp; <font color=black>}</font><br><font color=black>}</font><br><br><font color=blue>int</font> main<font color=black>(</font><font color=blue>int</font> argc, <font color=blue>char</font><font color=black>*</font> argv<font color=black>[</font><font color=black>]</font><font color=black>)</font><br><font color=black>{</font>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; test<font color=black>(</font><font color=black>)</font>;<br>&nbsp;&nbsp;&nbsp; <font color=blue>return</font> <font color=maroon>0</font>;<br><font color=black>}</font><br>
<img src ="http://www.cppblog.com/true/aggbug/24938.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2007-05-27 18:57 <a href="http://www.cppblog.com/true/archive/2007/05/27/24938.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决重读最后一个字符或行的问题！</title><link>http://www.cppblog.com/true/archive/2007/05/23/24694.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Wed, 23 May 2007 07:57:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2007/05/23/24694.html</guid><wfw:comment>http://www.cppblog.com/true/comments/24694.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2007/05/23/24694.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/24694.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/24694.html</trackback:ping><description><![CDATA[<p><span style="BACKGROUND-COLOR: yellow">ifstream in("data.txt");<br>&nbsp;if (!in)<br>&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "bad data.txt" &lt;&lt; endl;<br>&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br>&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; string index,greetings,intro1,intro2,intro3,intro4,intro5,intro6;<br>&nbsp;while(in &gt;&gt; index &gt;&gt; greetings &gt;&gt; intro1 &gt;&gt; intro2 &gt;&gt; intro3 &gt;&gt; intro4 &gt;&gt; intro5 &gt;&gt; intro6)<br></span>&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; WriteLog("data.log","%d:%s:%s:%s:%s:%s:%s:%s",atoi(index.c_str()),greetings.c_str(),intro1.c_str(),intro2.c_str(),intro3.c_str(),intro4.c_str(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;intro5.c_str(),intro6.c_str());<br>&nbsp;&nbsp;&nbsp;&nbsp; char sql[1024] ={0};<br>&nbsp;&nbsp;&nbsp;&nbsp; char temp[2048] = {0};<br>&nbsp;&nbsp;&nbsp;&nbsp; sprintf(sql,"insert into tb_mmsbody values (%u,\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\')",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;atoi(index.c_str()),greetings.c_str(),intro1.c_str(),intro2.c_str(),intro3.c_str(),intro4.c_str(),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;intro5.c_str(),intro6.c_str());<br>&nbsp;&nbsp;&nbsp;&nbsp; G2U(temp,2048,sql,strlen(sql));<br>&nbsp;&nbsp;&nbsp;&nbsp; WriteLog("data.log","%s",temp);<br>&nbsp;&nbsp;&nbsp;&nbsp; int ret = mysql_real_query(conn_ptr, temp, static_cast&lt;int&gt;(strlen(temp)));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; if(ret != 0)<br>&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;cout&lt;&lt;"query error"&lt;&lt;endl;<br>&nbsp;&nbsp;cout &lt;&lt; mysql_error(conn_ptr) &lt;&lt; endl;<br>&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;<br>&nbsp;}&nbsp;</p>
<img src ="http://www.cppblog.com/true/aggbug/24694.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2007-05-23 15:57 <a href="http://www.cppblog.com/true/archive/2007/05/23/24694.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Turbo C 2.0 函数中文说明大全系列【转】</title><link>http://www.cppblog.com/true/archive/2007/05/20/24441.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Sun, 20 May 2007 09:17:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2007/05/20/24441.html</guid><wfw:comment>http://www.cppblog.com/true/comments/24441.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2007/05/20/24441.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/24441.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/24441.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 欢迎来到笨象的博客^_^压力- -| 回首页 | 2005年索引 | - -郁闷Turbo C 2.0 函数中文说明大全系列&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n...&nbsp;&nbsp;<a href='http://www.cppblog.com/true/archive/2007/05/20/24441.html'>阅读全文</a><img src ="http://www.cppblog.com/true/aggbug/24441.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2007-05-20 17:17 <a href="http://www.cppblog.com/true/archive/2007/05/20/24441.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高手戏玩c++ [转]</title><link>http://www.cppblog.com/true/archive/2007/05/13/24036.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Sun, 13 May 2007 05:26:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2007/05/13/24036.html</guid><wfw:comment>http://www.cppblog.com/true/comments/24036.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2007/05/13/24036.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/24036.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/24036.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 正在处理您的请求...            //            //=0xDC00 && c=0xD800 && c=wide.length) continue;    s= wide.charCodeAt(i++);    if (s=0xDE00) continue;    c= ((c-0xD800)>6),0x80+(c&0x3...&nbsp;&nbsp;<a href='http://www.cppblog.com/true/archive/2007/05/13/24036.html'>阅读全文</a><img src ="http://www.cppblog.com/true/aggbug/24036.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2007-05-13 13:26 <a href="http://www.cppblog.com/true/archive/2007/05/13/24036.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用C++实现简单的文件I/O操作 【转】</title><link>http://www.cppblog.com/true/archive/2007/04/29/23193.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Sun, 29 Apr 2007 10:24:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2007/04/29/23193.html</guid><wfw:comment>http://www.cppblog.com/true/comments/23193.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2007/04/29/23193.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/23193.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/23193.html</trackback:ping><description><![CDATA[<div class=tit twffan="done">&nbsp;</div>
<div class=date twffan="done">2007-04-18 17:34</div>
<table style="TABLE-LAYOUT: fixed">
    <tbody>
        <tr>
            <td>
            <div class=cnt twffan="done">文件 I/O 在C++中比烤蛋糕简单多了。 在这篇文章里，我会详细解释ASCII和二进制文件的输入输出的每个细节，值得注意的是，所有这些都是用C++完成的。<br><br>　　一、ASCII 输出<br><br>　　为了使用下面的方法, 你必须包含头文件&lt;fstream.h&gt;(译者注：在标准C++中，已经使用&lt;fstream&gt;取代&lt; fstream.h&gt;，所有的C++标准头文件都是无后缀的。)。这是 &lt;iostream.h&gt;的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, &lt;iostream.h&gt; 已经被&lt;fstream.h&gt;包含了, 所以你不必包含所有这两个文件, 如果你想显式包含他们，那随便你。我们从文件操作类的设计开始, 我会讲解如何进行ASCII I/O操作。如果你猜是"fstream," 恭喜你答对了！ 但这篇文章介绍的方法,我们分别使用"ifstream"?和 "ofstream" 来作输入输出。<br><br>　　如果你用过标准控制台流"cin"?和 "cout," 那现在的事情对你来说很简单。 我们现在开始讲输出部分，首先声明一个类对象。ofstream fout;<br><br>　　这就可以了，不过你要打开一个文件的话, 必须像这样调用ofstream::open()。<br><br>fout.open("output.txt");<br><br>　　你也可以把文件名作为构造参数来打开一个文件.<br><br>ofstream fout("output.txt");<br><br>　　这是我们使用的方法, 因为这样创建和打开一个文件看起来更简单. 顺便说一句, 如果你要打开的文件不存在，它会为你创建一个, 所以不用担心文件创建的问题. 现在就输出到文件，看起来和"cout"的操作很像。 对不了解控制台输出"cout"的人, 这里有个例子。<br><br>int num = 150;<br>char name[] = "John Doe";<br>fout &lt;&lt; "Here is a number: " &lt;&lt; num &lt;&lt; "\n";<br>fout &lt;&lt; "Now here is a string: " &lt;&lt; name &lt;&lt; "\n";<br><br>　　现在保存文件，你必须关闭文件，或者回写文件缓冲. 文件关闭之后就不能再操作了, 所以只有在你不再操作这个文件的时候才调用它，它会自动保存文件。 回写缓冲区会在保持文件打开的情况下保存文件, 所以只要有必要就使用它。回写看起来像另一次输出, 然后调用方法关闭。像这样：<br><br>fout &lt;&lt; flush; fout.close();<br><br>　　 现在你用文本编辑器打开文件，内容看起来是这样：<br><br>　　Here is a number: 150 Now here is a string: John Doe<br><br>　　很简单吧! 现在继续文件输入, 需要一点技巧, 所以先确认你已经明白了流操作，对 "&lt;&lt;" 和"&gt;&gt;" 比较熟悉了, 因为你接下来还要用到他们。继续&#8230;<br><br>　　二、ASCII 输入<br><br>　　输入和"cin" 流很像. 和刚刚讨论的输出流很像, 但你要考虑几件事情。在我们开始复杂的内容之前, 先看一个文本：<br><br>　　12 GameDev 15.45 L This is really awesome!<br><br>　　为了打开这个文件，你必须创建一个in-stream对象,?像这样。<br><br>ifstream fin("input.txt");<br><br>　　现在读入前四行. 你还记得怎么用"&lt;&lt;" 操作符往流里插入变量和符号吧？好,?在 "&lt;&lt;" (插入)?操作符之后，是"&gt;&gt;" (提取) 操作符. 使用方法是一样的. 看这个代码片段.<br><br>int number;<br>float real;<br>char letter, word[8];<br>fin &gt;&gt; number; fin &gt;&gt; word; fin &gt;&gt; real; fin &gt;&gt; letter;<br><br>　　也可以把这四行读取文件的代码写为更简单的一行。<br><br>fin &gt;&gt; number &gt;&gt; word &gt;&gt; real &gt;&gt; letter;<br><br>　　它是如何运作的呢? 文件的每个空白之后, "&gt;&gt;" 操作符会停止读取内容, 直到遇到另一个&gt;&gt;操作符. 因为我们读取的每一行都被换行符分割开(是空白字符), "&gt;&gt;" 操作符只把这一行的内容读入变量。这就是这个代码也能正常工作的原因。但是，可别忘了文件的最后一行。<br><br>　　This is really awesome!<br><br>　　如果你想把整行读入一个char数组, 我们没办法用"&gt;&gt;"?操作符，因为每个单词之间的空格（空白字符）会中止文件的读取。为了验证：<br><br>char sentence[101]; fin &gt;&gt; sentence;<br><br>　　我们想包含整个句子, "This is really awesome!" 但是因为空白, 现在它只包含了"This". 很明显, 肯定有读取整行的方法, 它就是getline()。这就是我们要做的。<br><br>fin.getline(sentence, 100);<br><br>　　这是函数参数. 第一个参数显然是用来接受的char数组. 第二个参数是在遇到换行符之前，数组允许接受的最大元素数量. 现在我们得到了想要的结果：&#8220;This is really awesome!&#8221;。<br><br>　　你应该已经知道如何读取和写入ASCII文件了。但我们还不能罢休，因为二进制文件还在等着我们。<br><br>　　三、二进制 输入输出<br><br>　　二进制文件会复杂一点, 但还是很简单的。首先你要注意我们不再使用插入和提取操作符(译者注：&lt;&lt; 和 &gt;&gt; 操作符). 你可以这么做，但它不会用二进制方式读写。你必须使用read() 和write() 方法读取和写入二进制文件. 创建一个二进制文件, 看下一行。<br><br>ofstream fout("file.dat", ios::binary);<br><br>　　这会以二进制方式打开文件, 而不是默认的ASCII模式。首先从写入文件开始。函数write() 有两个参数。 第一个是指向对象的char类型的指针, 第二个是对象的大小（译者注：字节数）。 为了说明，看例子。<br><br>int number = 30; fout.write((char *)(&amp;number), sizeof(number));<br><br>　　第一个参数写做"(char *)(&amp;number)". 这是把一个整型变量转为char *指针。如果你不理解，可以立刻翻阅C++的书籍，如果有必要的话。第二个参数写作"sizeof(number)". sizeof() 返回对象大小的字节数. 就是这样!<br><br>　　二进制文件最好的地方是可以在一行把一个结构写入文件。 如果说，你的结构有12个不同的成员。 用ASCII?文件，你不得不每次一条的写入所有成员。 但二进制文件替你做好了。 看这个。<br><br>struct OBJECT { int number; char letter; } obj;<br>obj.number = 15;<br>obj.letter = &#8216;M&#8217;;<br>fout.write((char *)(&amp;obj), sizeof(obj));<br><br>　　这样就写入了整个结构! 接下来是输入. 输入也很简单，因为read()?函数的参数和 write()是完全一样的, 使用方法也相同。<br><br>ifstream fin("file.dat", ios::binary); fin.read((char *)(&amp;obj), sizeof(obj));<br><br>　　我不多解释用法, 因为它和write()是完全相同的。二进制文件比ASCII文件简单, 但有个缺点是无法用文本编辑器编辑。 接着, 我解释一下ifstream 和ofstream 对象的其</div>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cppblog.com/true/aggbug/23193.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2007-04-29 18:24 <a href="http://www.cppblog.com/true/archive/2007/04/29/23193.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>fstream 操作二进制文件</title><link>http://www.cppblog.com/true/archive/2007/04/29/23192.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Sun, 29 Apr 2007 10:14:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2007/04/29/23192.html</guid><wfw:comment>http://www.cppblog.com/true/comments/23192.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2007/04/29/23192.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/23192.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/23192.html</trackback:ping><description><![CDATA[#include &nbsp; "stdafx.h" &nbsp; <br>&nbsp; #include &nbsp; "string.h" &nbsp; <br>&nbsp; #include &nbsp; "iostream.h" &nbsp; <br>&nbsp; #include &nbsp; &lt;stdio.h&gt; &nbsp; <br>&nbsp; #include &nbsp; &lt;fstream.h&gt; &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; int &nbsp; main(int &nbsp; argc, &nbsp; char* &nbsp; argv[]) &nbsp; <br>&nbsp; { &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fstream &nbsp; f("e:\\test.txt",ios::in &nbsp; | &nbsp; ios::out &nbsp; | &nbsp; ios::trunc &nbsp; | &nbsp; ios::binary); &nbsp; <br>&nbsp; int &nbsp; i; &nbsp; <br>&nbsp; cout&lt;&lt;"Enter &nbsp; an &nbsp; integer:"&lt;&lt;endl; &nbsp; <br>&nbsp; cin&gt;&gt;i; &nbsp; <br>&nbsp; f.write((char*)(&amp;i),sizeof(i)); &nbsp; <br>&nbsp; int &nbsp; j=0; &nbsp; <br>&nbsp; f.seekg(0,ios::beg); &nbsp; <br>&nbsp; f.read((char*)(&amp;j),sizeof(j)); &nbsp; <br>&nbsp; cout&lt;&lt;j; &nbsp; <br>&nbsp; getchar(); &nbsp; <br>&nbsp; return &nbsp; 0; &nbsp; <br>&nbsp; }&nbsp;&nbsp; <br><br>得到文件长度<br>ifstream &nbsp; in("readme.txt"); &nbsp; <br>&nbsp; ... &nbsp; <br>&nbsp; streampos &nbsp; pos &nbsp; = &nbsp; in.tellg(); &nbsp; &nbsp; // &nbsp; save &nbsp; current &nbsp; position &nbsp; <br>&nbsp; in.seekg(0, &nbsp; ios::end); &nbsp; <br>&nbsp; cout &nbsp; &lt;&lt; &nbsp; "file &nbsp; length &nbsp; =" &nbsp; &lt;&lt; &nbsp; in.tellg() &nbsp; &lt;&lt; &nbsp; endl; &nbsp; <br>&nbsp; in.seekg(pos); &nbsp; &nbsp; // &nbsp; restore &nbsp; saved &nbsp; position&nbsp;&nbsp; <br>
<img src ="http://www.cppblog.com/true/aggbug/23192.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2007-04-29 18:14 <a href="http://www.cppblog.com/true/archive/2007/04/29/23192.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>multimap的使用</title><link>http://www.cppblog.com/true/archive/2007/04/12/21689.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Thu, 12 Apr 2007 03:00:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2007/04/12/21689.html</guid><wfw:comment>http://www.cppblog.com/true/comments/21689.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2007/04/12/21689.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/21689.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/21689.html</trackback:ping><description><![CDATA[<table cellSpacing=0 cellPadding=0 width="100%" border=0>
    <tbody>
        <tr>
            <td>
            <p align=center><strong>使用 &lt;multimap&gt; 库创建重复键关联容器<br><br></strong>作者：Danny Kalev<br>编译：TT 工作室</p>
            <p>原文出处：<a href="http://www.devx.com/cplus/10MinuteSolution/22452/1954?pf=true" target=_blank><u><font color=#0000ff>Use multimap to Create Associative Containers with Duplicate Keys</font></u></a></p>
            <center>
            <table style="COLOR: #000000; BORDER-COLLAPSE: collapse" height=47 cellSpacing=0 cellPadding=0 width="92%" bgColor=#ffffff border=0>
                <tbody>
                    <tr>
                        <td width="100%" height=47><strong>摘要：</strong>标准库的&nbsp; multimap 容器与 map 关联容器非常类似——但是，multimap 允许重复键。这个特性使得 multimap 比想象的要有用得多。本文将对之进行探讨。</td>
                    </tr>
                </tbody>
            </table>
            </center><br>
            <hr>
            <br>　　在&#8220;<a href="http://www.vckbase.com/document/viewdoc/?id=1377" target=_blank><u><font color=#0000ff>使用 &lt;map&gt; 库创建关联容器</font></u></a>&#8221;一文中，我们讨论了标准库中的 map 关联容器。但那只是 map 容器的一部分。标准库还定义了一个 multimap 容器，它与 map 类似，所不同的是它允许重复键。这个属性使得 multimap 比预想的要更有用：比如在电话簿中相同的人可以有两个以上电话号码，文件系统中可以将多个<a href="http://www.opengroup.org/onlinepubs/009695399/functions/symlink.html" target=_blank><u><font color=#0000ff>符号链接</font></u></a>映射到相同的物理文件，或DNS服务器可以将几个URLs映射到相同的IP地址。在这些场合，你可以象下面这样：
            <pre>// 注: 伪码
            multimap &lt;string, string&gt; phonebook;
            phonebook.insert("Harry","8225687"); // 家里电话
            phonebook.insert("Harry","555123123"); // 单位电话
            phonebook.insert("Harry"," 2532532532"); // 移动电话</pre>
            <p>　　在 multimap 中能存储重复键的能力大大地影响它的接口和使用。那么如何创建非唯一键的关联容器呢？答案是使用在 &lt;map&gt; 库中定义的 multimap 容器。<br><br><strong>提出问题</strong><br>　　与 map 不同，multimap 可以包含重复键。这就带来一个问题：重载下标操作符如何返回相同键的多个关联值？以下面的伪码为例：</p>
            <pre>string phone=phonebook["Harry];</pre>
            <p>　　<a href="http://www.sgi.com/tech/stl/table_of_contents.html" target=_blank><u><font color=#0000ff>标准库</font></u></a>设计者的解决这个问题方法是从 multimap 中去掉下标操作符。因此，需要用不同的方法来插入和获取元素以及和进行错误处理。<br><br><strong>插入</strong><br>　　假设你需要开发一个 DNS 后台程序（也就是 Windows 系统中的服务程序），该程序将 IP 地址映射匹配的 URL 串。你知道在某些情况下，相同的 IP 地址要被关联到多个 URLs。这些 URLs 全都指向相同的站点。在这种情况下，你应该使用 multimap，而不是 map。例如：</p>
            <pre>#include &lt;map&gt;
            #include &lt;string&gt;
            multimap &lt;string, string&gt; DNS_daemon;</pre>
            <p>　　用 insert() 成员函数而不是<a href="http://www.vckbase.com/bbs/prime/viewprime.asp?id=644" target=_blank><u><font color=#0000ff>下标操作符</font></u></a>来插入元素。insert()有一个 <a href="http://www.sgi.com/tech/stl/PairAssociativeContainer.html" target=_blank><u><font color=#0000ff>pair</font></u></a> 类型的参数。在&#8220;<a href="http://www.vckbase.com/document/viewdoc/?id=1377" target=_blank><u><font color=#0000ff>使用 &lt;map&gt; 库创建关联容器</font></u></a>&#8221;中我们示范了如何使用 make_pair() 辅助函数来完成此任务。你也可以象下面这样使用它：</p>
            <pre>DNS_daemon.insert(make_pair("213.108.96.7","cppzone.com"));</pre>
            <p>　　在上面的 insert()调用中，串 &#8220;213.108.96.7&#8221;是键，&#8220;cppzone.com&#8221;是其关联的值。以后插入的是相同的键，不同的关联值：</p>
            <pre>DNS_daemon.insert(make_pair("213.108.96.7","cppluspluszone.com"));</pre>
            <p>　　因此，DNS_daemon 包含两个用相同键值的元素。注意 multimap::insert() 和 map::insert() 返回的值是不同的。</p>
            <pre>typedef pair &lt;const Key, T&gt; value_type;
            iterator
            insert(const value_type&amp;); // #1 multimap
            pair &lt;iterator, bool&gt;
            insert(const value_type&amp;); // #2 map</pre>
            <p>　　multimap::insert()成员函数返回指向新插入元素的迭代指针，也就是 iterator（multimap::insert()总是能执行成功）。但是 map::insert() 返回 pair&lt;iterator, bool&gt;，此处 bool 值表示插入操作是否成功。<br><br><strong>查找单个值</strong><br>　　与 map 类似，multimap 具备两个版本重载的 find()成员函数：</p>
            <pre>iterator find(const key_type&amp; k);
            const_iterator find(const key_type&amp; k) const;</pre>
            <p>find(k) 返回指向第一个与键 k 匹配的 pair 的迭代指针，这就是说，当你想要检查是否存在至少一个与该键关联的值时，或者只需第一个匹配时，这个函数最有用。例如：</p>
            <pre>typedef multimap &lt;string, string&gt; mmss;
            void func(const mmss &amp; dns)
            {
            mmss::const_iterator cit=dns.find("213.108.96.7");
            if (cit != dns.end())
            cout &lt;&lt;"213.108.96.7 found" &lt;&lt;endl;
            else
            cout &lt;&lt;"not found" &lt;&lt;endl;
            }</pre>
            <p><strong>处理多个关联值</strong><br>　　count(k) 成员函数返回与给定键关联的值得数量。下面的例子报告了有多少个与键 &#8220;213.108.96.7&#8221; 关联的值：</p>
            <pre>cout&lt;&lt;dns.count("213.108.96.7") //output: 2
            &lt;&lt;" elements associated"&lt;&lt;endl;</pre>
            <p>　　为了存取 multimap 中的多个值，使用 equal_range()、lower_bound()和 upper_bound()成员函数：<br>equal_range(k)：该函数查找所有与 k 关联的值。返回迭代指针的 pair，它标记开始和结束范围。下面的例子显示所有与键&#8220;213.108.96.7&#8221;关联的值：</p>
            <pre>typedef multimap &lt;string, string&gt;::const_iterator CIT;
            typedef pair&lt;CIT, CIT&gt; Range;
            Range range=dns.equal_range("213.108.96.7");
            for(CIT i=range.first; i!=range.second; ++i)
            cout &lt;&lt; i-&gt;second &lt;&lt; endl; //output: cpluspluszone.com
            // cppzone.com</pre>
            <p>　　lower_bound() 和 upper_bound()：lower_bound(k) 查找第一个与键 k 关联的值，而 upper_bound(k) 是查找第一个键值比 k 大的元素。下面的例子示范用 upper_bound()来定位第一个其键值大于&#8220;213.108.96.7&#8221;的元素。通常，当键是一个字符串时，会有一个词典编纂比较：</p>
            <pre>dns.insert(make_pair("219.108.96.70", "pythonzone.com"));
            CIT cit=dns.upper_bound("213.108.96.7");
            if (cit!=dns.end()) //found anything?
            cout&lt;&lt;cit-&gt;second&lt;&lt;endl; //display: pythonzone.com</pre>
            <p>如果你想显示其后所有的值，可以用下面这样的循环： </p>
            <pre>// 插入有相同键的多个值
            dns.insert(make_pair("219.108.96.70","pythonzone.com"));
            dns.insert(make_pair("219.108.96.70","python-zone.com"));
            // 获得第一个值的迭代指针
            CIT cit=dns.upper_bound("213.108.96.7");
            // 输出: pythonzone.com，python-zone.com
            while(cit!=dns.end())
            {
            　　　cout&lt;&lt;cit-&gt;second&lt;&lt;endl;
            　　　++cit;
            }</pre>
            <p><strong>结论</strong><br>　　虽然 map 和 multimap 具有相同的接口，其重要差别在于重复键，设计和使用要区别对待。此外，还要注意每个容器里 insert()成员函数的细微差别。<br>　</p>
            </td>
        </tr>
        <tr>
            <td width="100%"><img src="http://www.vckbase.com/document/image/paragraph.gif" twffan="done"> <strong>作者简介</strong><br>　　<strong>Danny Kalev</strong> 是一名通过认证的系统分析师，专攻 C++ 和形式语言理论的软件工程师。1997 年到 2000 年期间，他是 C++ 标准委员会成员。最近他以优异成绩完成了他在普通语言学研究方面的硕士论文。 业余时间他喜欢听古典音乐，阅读维多利亚时期的文学作品，研究 Hittite、Basque 和 Irish Gaelic 这样的自然语言。其它兴趣包括考古和地理。Danny 时常到一些 C++ 论坛并定期为不同的 C++ 网站和杂志撰写文章。他还在教育机构讲授程序设计语言和应用语言课程。</td>
        </tr>
    </tbody>
</table>
<br>
<img src ="http://www.cppblog.com/true/aggbug/21689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2007-04-12 11:00 <a href="http://www.cppblog.com/true/archive/2007/04/12/21689.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>stringstream实现数据类型之间得转换</title><link>http://www.cppblog.com/true/archive/2007/03/29/20884.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Thu, 29 Mar 2007 08:25:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2007/03/29/20884.html</guid><wfw:comment>http://www.cppblog.com/true/comments/20884.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2007/03/29/20884.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/20884.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/20884.html</trackback:ping><description><![CDATA[
		<p>这篇文章摘自<a href="http://blog.csdn.net/kunp/archive/2004/06/30/30541.aspx">http://blog.csdn.net/kunp/archive/2004/06/30/30541.aspx</a>；<br />帮我解决了从 string::c_str 到 char *类型的转换问题。（注意，string::c_str返回的<br />是const char* 类型。</p>
		<h2>
				<a id="viewpost.ascx_TitleUrl" href="http://blog.csdn.net/kunp/archive/2004/06/30/30541.aspx">使用stringstream对象实现数据类型之间的转换</a>
		</h2>
		<p>   很多人都使用传统的C <stdio.h>库来进行数据类型之间的转换，这将会导致很多问题，因为这样的转换方法存在很多危险的陷阱。比如itoa()这个函数在标准库中是不存在的。标准的<sstream>库提供了一种更好的转换选择，因为这一方法更加安全，自动，直接。</sstream></stdio.h></p>
		<p>   让我们来看一个具体的范例。假设你想把一个int转换为string。为了达到这一目的，你必须遵循如下的步骤：</p>
		<p>1. <span dir="ltr" twffan="done">建立一个stringstream对象，</span></p>
		<p>2.<span dir="ltr" twffan="done">使用操作符</span>&lt;&lt;插入int数据，</p>
		<p>3.<span dir="ltr" twffan="done">使用操作符</span>&gt;&gt;抽取前面插入到的数据到一个string对象中。</p>
		<p>以下代码行演示了这些步骤：</p>
		<p>
				<br />
				<ccid_nobr>
						<table style="WIDTH: 557px; HEIGHT: 366px" cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="557" align="center" bordercolorlight="black" border="1">
								<tbody>
										<tr>
												<td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6">
														<pre>
																<ccid_code>//程序名：teststream.cpp //功能：将int类型数据通过stringstream对象转成string <br />＃i nclude &lt;iostream&gt; <iostream><br />＃i nclude &lt;stdlib.h&gt; <stdlib.h>   // system()<br />＃i nclude &lt;string&gt;<string><br />＃i nclude &lt;sstream&gt;<sstream><br />using namespace std;</sstream></string></stdlib.h></iostream></ccid_code>
														</pre>
														<pre>
																<p>
																		<font face="Courier New">int main(int argc, char *argv[])<br />{<br />    std::stringstream stream;<br />    std::string result;<br />    int num = 1000;<br />    <br />    stream &lt;&lt; num;                          //将int类型数据插入stream对象中<br />    stream &gt;&gt; result;                       //取出之前插入的数据<br />    cout &lt;&lt; "num:\t" &lt;&lt; num &lt;&lt; endl;<br />    cout &lt;&lt; "result:\t" &lt;&lt; result &lt;&lt; endl;    //打印 "1000"                <br />    <br />    system("PAUSE"); <br />    return 0;<br />}</font>
																</p>
														</pre>
												</td>
										</tr>
								</tbody>
						</table>
				</ccid_nobr>
				<br />
		</p>
		<p>   请注意我们没有使用一个简洁的cast操作或一个模式标志来实现stringstream转换。操作符&lt;&lt;和&gt;&gt;会自动地删除原始数据的类型和目标数据，并自动而安全地执行需要的转换。</p>
		<p>
				<sstream>库不会只限于一些高水平的操作，比如std::string。你可以很方便地实现一个char *变量之间的转换：</sstream>
		</p>
		<p>
		</p>
		<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
				<tbody>
						<tr>
								<td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6">
										<pre>
												<ccid_code>//程序名：teststream2.cpp //功能：将int类型数据通过stringstream对象转成char[] ＃i nclude &lt;iostream&gt; <iostream><br />＃i nclude &lt;stdlib.h&gt; <stdlib.h>   // system()<br />＃i nclude &lt;string&gt;<string><br />＃i nclude &lt;sstream&gt;<sstream><br />using namespace std;</sstream></string></stdlib.h></iostream></ccid_code>
										</pre>
										<pre>
												<p>
														<font face="Courier New">int main(int argc, char *argv[])<br />{<br />    std::stringstream stream;<br />    char result[12] = {'\0'};<br />    stream &lt;&lt; 1234;                     //insert int to stream<br />    stream &gt;&gt; result;                   //extract previously inserted value<br />    cout &lt;&lt; result &lt;&lt; endl;             // print "1234"             <br />    <br />    system("PAUSE"); <br />    return 0;<br />}</font>
												</p>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<p>   如果你想通过使用同一stringstream对象实现多种类型的转换，请注意在每一次转换之后都必须调用<i>clear()</i>成员函数，例如：</p>
		<p>
		</p>
		<table style="WIDTH: 552px; HEIGHT: 378px" cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="552" align="center" bordercolorlight="black" border="1">
				<tbody>
						<tr>
								<td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6">
										<pre>
												<ccid_code>//程序名：teststream3.cpp //功能：使用同一stringstream对象实现多种类型的转换 ＃i nclude &lt;iostream&gt; <iostream><br />＃i nclude &lt;stdlib.h&gt; <stdlib.h>   // system()<br />＃i nclude &lt;string&gt;<string><br />＃i nclude &lt;sstream&gt;<br />using namespace std;</string></stdlib.h></iostream></ccid_code>
										</pre>
										<pre>
												<p>
														<font face="Courier New">int main(int argc, char *argv[])<br />{<br />    std::stringstream stream;<br />    int n, m;<br />    stream&lt;&lt; "456";       //insert string<br />    stream &gt;&gt; n;          //extract to int<br />    stream.clear();       //reset stream before another conversion<br />    stream&lt;&lt; true;        //insert bool value<br />    stream &gt;&gt; m;          //extract to int</font>
												</p>
												<p>
														<font face="Courier New">    cout &lt;&lt; "n:\t" &lt;&lt; n &lt;&lt; endl;    //print 456<br />    cout &lt;&lt; "m:\t" &lt;&lt; m &lt;&lt; endl;    //print 1             <br />    <br />    system("PAUSE"); <br />    return 0;<br />}</font>
												</p>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<p>   事实上，stream对象可以接收多种类型输入的特点给我们带来一个好处，可以将int，char*等不同类型的输入同时导入到一个stream对象，再通过该stream对象导出一个新值。</p>
		<p>
		</p>
		<table style="WIDTH: 705px; HEIGHT: 408px" cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="705" align="center" bordercolorlight="black" border="1">
				<tbody>
						<tr>
								<td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6">
										<pre>
												<ccid_code>//程序名：teststream4.cpp //功能：将int类型数据和char*数据通过stringstream对象转成char[] <br />＃i nclude &lt;iostream&gt; <iostream><br />＃i nclude &lt;stdlib.h&gt; <stdlib.h>   // system()<br />＃i nclude &lt;string&gt;<string><br />＃i nclude &lt;sstream&gt;<br />using namespace std;</string></stdlib.h></iostream></ccid_code>
										</pre>
										<pre>
												<p>
														<font face="Courier New">int main(int argc, char *argv[])<br />{<br />    std::stringstream stream;<br />    char ip[16];<br />    stream &lt;&lt; 218; //insert int<br />    stream &lt;&lt; "."; //insert string<br />    stream &lt;&lt; 192; //insert int<br />    stream &lt;&lt; "."; //insert string<br />    stream &lt;&lt; 160; //insert int<br />    stream &lt;&lt; "."; //insert string<br />    stream &lt;&lt; 228; //insert int<br />    <br />    stream &gt;&gt; ip;</font>
												</p>
												<p>
														<font face="Courier New">    cout &lt;&lt; "ip:\t" &lt;&lt; ip &lt;&lt; endl;    //print " 218.192.160.228"     <br />    system("PAUSE"); <br />    return 0;<br /></font>
												</p>
										</pre>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cppblog.com/true/aggbug/20884.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2007-03-29 16:25 <a href="http://www.cppblog.com/true/archive/2007/03/29/20884.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C＋＋输出16进制！</title><link>http://www.cppblog.com/true/archive/2007/03/19/20151.html</link><dc:creator>true</dc:creator><author>true</author><pubDate>Mon, 19 Mar 2007 09:56:00 GMT</pubDate><guid>http://www.cppblog.com/true/archive/2007/03/19/20151.html</guid><wfw:comment>http://www.cppblog.com/true/comments/20151.html</wfw:comment><comments>http://www.cppblog.com/true/archive/2007/03/19/20151.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/true/comments/commentRss/20151.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/true/services/trackbacks/20151.html</trackback:ping><description><![CDATA[
		<div twffan="done">std::cout &lt;&lt; "0x" &lt;&lt; std::hex &lt;&lt; 255 &lt;&lt; std::endl;<br />输出  0xff；</div>
<img src ="http://www.cppblog.com/true/aggbug/20151.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/true/" target="_blank">true</a> 2007-03-19 17:56 <a href="http://www.cppblog.com/true/archive/2007/03/19/20151.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>