﻿<?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++博客-Life is Good.</title><link>http://www.cppblog.com/85940806/</link><description>Enhance Tech and English</description><language>zh-cn</language><lastBuildDate>Wed, 08 Apr 2026 06:22:59 GMT</lastBuildDate><pubDate>Wed, 08 Apr 2026 06:22:59 GMT</pubDate><ttl>60</ttl><item><title>CreateProcess</title><link>http://www.cppblog.com/85940806/archive/2012/04/12/171107.html</link><dc:creator>Mike Song</dc:creator><author>Mike Song</author><pubDate>Thu, 12 Apr 2012 08:59:00 GMT</pubDate><guid>http://www.cppblog.com/85940806/archive/2012/04/12/171107.html</guid><wfw:comment>http://www.cppblog.com/85940806/comments/171107.html</wfw:comment><comments>http://www.cppblog.com/85940806/archive/2012/04/12/171107.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/85940806/comments/commentRss/171107.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/85940806/services/trackbacks/171107.html</trackback:ping><description><![CDATA[<div>&nbsp;&nbsp;&nbsp; STARTUPINFO si;<br />&nbsp;&nbsp; &nbsp;PROCESS_INFORMATION pi;<br />&nbsp;&nbsp; &nbsp;si.cb = sizeof(STARTUPINFO);<br />&nbsp;&nbsp; &nbsp;si.lpReserved = NULL;<br />&nbsp;&nbsp; &nbsp;si.lpTitle = NULL;<br />&nbsp;&nbsp; &nbsp;si.lpDesktop = NULL;<br />&nbsp;&nbsp; &nbsp;si.dwX = si.dwY = si.dwYSize = si.dwXSize = 0;<br />&nbsp;&nbsp; &nbsp;si.dwFlags = STARTF_USESHOWWINDOW;<br />&nbsp;&nbsp; &nbsp;si.wShowWindow = SW_HIDE;<br />&nbsp;&nbsp; &nbsp;si.lpReserved2 = NULL;<br />&nbsp;&nbsp; &nbsp;si.cbReserved2 = 0;<br /><br />&nbsp;&nbsp; &nbsp;BOOL ret = CreateProcess(strHostFileFullName, NULL, NULL, NULL, FALSE, 0, NULL, strPath, &amp;si, &amp;pi);<br />&nbsp;&nbsp; &nbsp;if (!ret) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return false;<br />&nbsp;&nbsp; &nbsp;}<br /><br />&nbsp;&nbsp; &nbsp;WaitForInputIdle(pi.hProcess, 30000);<br /><br />&nbsp;&nbsp;&nbsp; XXXCtxActivator activator;<br />&nbsp;&nbsp; &nbsp;if(!activator.IsActivated())<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return false;<br /><br />&nbsp;&nbsp; &nbsp;CComPtr&lt;IClassFactory&gt; pFactory;<br />&nbsp;&nbsp; &nbsp;HRESULT hr = CoGetClassObject(CLSID_XXX, CLSCTX_LOCAL_SERVER, NULL, __uuidof(pFactory), reinterpret_cast&lt;void**&gt;(&amp;pFactory));<br />&nbsp;&nbsp; &nbsp;if (FAILED(hr))<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return false;<br /><br /><div>&nbsp;&nbsp;&nbsp; CComPtr&lt;IXXX&gt; s_spXXX;</div>&nbsp;&nbsp;&nbsp; hr = pFactory-&gt;CreateInstance(NULL, __uuidof(*s_spXXX), reinterpret_cast&lt;void**&gt;(&amp;s_spXXX));<br />&nbsp;&nbsp; &nbsp;if(FAILED(hr))<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return false;<br />&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp; &nbsp;// If created successfully, start the monitoring thread<br />&nbsp;&nbsp; &nbsp;DWORD dwProcessId = GetCurrentProcessId();<br />&nbsp;&nbsp; &nbsp;long nMonitoringPid = 0;<br /><br />&nbsp;&nbsp; &nbsp;hr = s_spXXX-&gt;StartProcessManagementThread(dwProcessId, &amp;nMonitoringPid);</div>&nbsp;&nbsp;&nbsp; if (FAILED(hr) || nMonitoringPid == 0)<br /><div>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return false;</div><img src ="http://www.cppblog.com/85940806/aggbug/171107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/85940806/" target="_blank">Mike Song</a> 2012-04-12 16:59 <a href="http://www.cppblog.com/85940806/archive/2012/04/12/171107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Why "The system cannot find the batch label specified" is thrown even if label exists?</title><link>http://www.cppblog.com/85940806/archive/2011/08/30/154716.html</link><dc:creator>Mike Song</dc:creator><author>Mike Song</author><pubDate>Tue, 30 Aug 2011 09:27:00 GMT</pubDate><guid>http://www.cppblog.com/85940806/archive/2011/08/30/154716.html</guid><wfw:comment>http://www.cppblog.com/85940806/comments/154716.html</wfw:comment><comments>http://www.cppblog.com/85940806/archive/2011/08/30/154716.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/85940806/comments/commentRss/154716.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/85940806/services/trackbacks/154716.html</trackback:ping><description><![CDATA[<br />This is caused by the different line endings after syncing from P4. The P4 client has settings for LineEnd, "local" will show CRLF, while "share" shows LF. This error maybe only existing in x86 machine. <br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/85940806/P4-setting.jpg" height="304" width="614" /><br /><br /><br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/85940806/CRLF.jpg" height="90" width="251" /><br /><br /><br /><img alt="" src="http://www.cppblog.com/images/cppblog_com/85940806/LF.jpg" height="91" width="249" /><br /><br />This is tricky issue. Thanks very much for Jeffery's help.<img src ="http://www.cppblog.com/85940806/aggbug/154716.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/85940806/" target="_blank">Mike Song</a> 2011-08-30 17:27 <a href="http://www.cppblog.com/85940806/archive/2011/08/30/154716.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mutable</title><link>http://www.cppblog.com/85940806/archive/2011/06/23/149239.html</link><dc:creator>Mike Song</dc:creator><author>Mike Song</author><pubDate>Thu, 23 Jun 2011 02:39:00 GMT</pubDate><guid>http://www.cppblog.com/85940806/archive/2011/06/23/149239.html</guid><wfw:comment>http://www.cppblog.com/85940806/comments/149239.html</wfw:comment><comments>http://www.cppblog.com/85940806/archive/2011/06/23/149239.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/85940806/comments/commentRss/149239.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/85940806/services/trackbacks/149239.html</trackback:ping><description><![CDATA[<div><div>mutable英音：'mju:təbl美音：'mjutəb!，形容词，意为易变的;反复无常的。在C++语言中，是命令语言&#8212;&#8212;如果一个函数被const 修饰，那么它将无法修改其成员变量的，但是如果这个成员变量是被mutable修饰的话，则可以修改。</div><br /><div>mutable 可以用来指出，即使结构或者类变量为const，其某个成员也可以被修改。 </div><br /><div>在c++的类中， 如果一个函数被const 修饰，那么它将无法修改其成员变量的，但是如果这个成员变量是被mutable修饰的话，则可以修改。</div><br /><div>例如:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;data<br />　　{<br />　　</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;name[</span><span style="color: #000000; ">30</span><span style="color: #000000; ">];<br />　　mutable&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000;">&nbsp;accesses;<br />　　<img src="http://www.cppblog.com/Images/dot.gif"  alt="" />.<br />　　};<br />　　</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;data&nbsp;veep&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{</span><span style="color: #000000; ">"</span><span style="color: #000000; ">david</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,}<br />　　strcpy(veep.name,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Jimmy</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;not&nbsp;allowed</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">　　veep.accesses</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;allowed <br /></span></div><br /><div>　veep 的const限定符禁止程序修改veep的成员，但access成员的mutable说明符表示access不受这种限制。</div><br /> </div></div><img src ="http://www.cppblog.com/85940806/aggbug/149239.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/85940806/" target="_blank">Mike Song</a> 2011-06-23 10:39 <a href="http://www.cppblog.com/85940806/archive/2011/06/23/149239.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Abstract Factory</title><link>http://www.cppblog.com/85940806/archive/2011/06/11/148511.html</link><dc:creator>Mike Song</dc:creator><author>Mike Song</author><pubDate>Sat, 11 Jun 2011 14:47:00 GMT</pubDate><guid>http://www.cppblog.com/85940806/archive/2011/06/11/148511.html</guid><wfw:comment>http://www.cppblog.com/85940806/comments/148511.html</wfw:comment><comments>http://www.cppblog.com/85940806/archive/2011/06/11/148511.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/85940806/comments/commentRss/148511.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/85940806/services/trackbacks/148511.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 名称 								 										Abstract Factory 								 						 						 								结构 								 										 								 						 						 								意图 								提供一个创建一系列相关或相互依赖对象的接口，而无需指定它们具体的类。 						 						 								适用性 				...&nbsp;&nbsp;<a href='http://www.cppblog.com/85940806/archive/2011/06/11/148511.html'>阅读全文</a><img src ="http://www.cppblog.com/85940806/aggbug/148511.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/85940806/" target="_blank">Mike Song</a> 2011-06-11 22:47 <a href="http://www.cppblog.com/85940806/archive/2011/06/11/148511.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Factory Method</title><link>http://www.cppblog.com/85940806/archive/2011/06/11/148510.html</link><dc:creator>Mike Song</dc:creator><author>Mike Song</author><pubDate>Sat, 11 Jun 2011 14:39:00 GMT</pubDate><guid>http://www.cppblog.com/85940806/archive/2011/06/11/148510.html</guid><wfw:comment>http://www.cppblog.com/85940806/comments/148510.html</wfw:comment><comments>http://www.cppblog.com/85940806/archive/2011/06/11/148510.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/85940806/comments/commentRss/148510.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/85940806/services/trackbacks/148510.html</trackback:ping><description><![CDATA[<div><table width="70%" align="center" border="1"><tbody><tr><td>名称</td> 								<td> 										<strong>Factory Method</strong> 								</td> 						</tr> 						<tr> 								<td>结构</td> 								<td> 										<div><img src="data:image/png;base64,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" alt="" /></div><br /> 								</td> 						</tr> 						<tr> 								<td>意图</td> 								<td>定义一个用于创建对象的接口，让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。</td> 						</tr> 						<tr> 								<td>适用性</td> 								<td> 										<ul><li>当一个类不知道它所必须创建的对象的类的时候。  </li><li>当一个类希望由它的子类来指定它所创建的对象的时候。  </li><li>当类将创建对象的职责委托给多个帮助子类中的某一个，并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。 </li></ul> 								</td> 						</tr> 						<tr> 								<td> 								<br /></td> 								<td> 								<br /></td></tr></tbody></table></div><br /><div><img src="data:image/png;base64,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" alt="" /><br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;FactoryMethod<br />{<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">abstract</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;LightFactory<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">abstract</span><span style="color: #000000; ">&nbsp;Light&nbsp;CreateLight();<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;BulbLightFactory&nbsp;:&nbsp;LightFactory<br />&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">override</span><span style="color: #000000; ">&nbsp;Light&nbsp;CreateLight()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;BulbLight();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;TubeLightFactory&nbsp;:&nbsp;LightFactory<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">override</span><span style="color: #000000; ">&nbsp;Light&nbsp;CreateLight()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;TubeLight();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />}<br /></span></div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;FactoryMethod<br />{<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">abstract</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;Light<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">abstract</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;TurnOn();<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">abstract</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;TurnOff();<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;BulbLight&nbsp;:&nbsp;Light<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">override</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;TurnOn()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Bulb&nbsp;Ligh&nbsp;is&nbsp;Turned&nbsp;on.\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">override</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;TurnOff()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Bulb&nbsp;Ligh&nbsp;is&nbsp;Turned&nbsp;off.\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;TubeLight&nbsp;:&nbsp;Light<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">override</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;TurnOn()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Tube&nbsp;Ligh&nbsp;is&nbsp;Turned&nbsp;on.\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">override</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;TurnOff()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Tube&nbsp;Ligh&nbsp;is&nbsp;Turned&nbsp;off.\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />}</span></div><br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;FactoryMethod<br />{<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;Client<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;Main()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LightFactory&nbsp;BulbFactory&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;BulbLightFactory();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LightFactory&nbsp;TubeFactory&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;TubeLightFactory();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Light&nbsp;l1&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;BulbFactory.CreateLight();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Light&nbsp;l2&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;TubeFactory.CreateLight();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l1.TurnOn();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l1.TurnOff();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">===============\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l2.TurnOn();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l2.TurnOff();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />}</span></div></div><img src ="http://www.cppblog.com/85940806/aggbug/148510.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/85940806/" target="_blank">Mike Song</a> 2011-06-11 22:39 <a href="http://www.cppblog.com/85940806/archive/2011/06/11/148510.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Observer </title><link>http://www.cppblog.com/85940806/archive/2011/06/11/148509.html</link><dc:creator>Mike Song</dc:creator><author>Mike Song</author><pubDate>Sat, 11 Jun 2011 14:32:00 GMT</pubDate><guid>http://www.cppblog.com/85940806/archive/2011/06/11/148509.html</guid><wfw:comment>http://www.cppblog.com/85940806/comments/148509.html</wfw:comment><comments>http://www.cppblog.com/85940806/archive/2011/06/11/148509.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/85940806/comments/commentRss/148509.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/85940806/services/trackbacks/148509.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->名称 								 										Observer 								 						 						 								结构 								 										 								 						 	...&nbsp;&nbsp;<a href='http://www.cppblog.com/85940806/archive/2011/06/11/148509.html'>阅读全文</a><img src ="http://www.cppblog.com/85940806/aggbug/148509.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/85940806/" target="_blank">Mike Song</a> 2011-06-11 22:32 <a href="http://www.cppblog.com/85940806/archive/2011/06/11/148509.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>15 - memchr</title><link>http://www.cppblog.com/85940806/archive/2011/06/11/148508.html</link><dc:creator>Mike Song</dc:creator><author>Mike Song</author><pubDate>Sat, 11 Jun 2011 14:11:00 GMT</pubDate><guid>http://www.cppblog.com/85940806/archive/2011/06/11/148508.html</guid><wfw:comment>http://www.cppblog.com/85940806/comments/148508.html</wfw:comment><comments>http://www.cppblog.com/85940806/archive/2011/06/11/148508.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/85940806/comments/commentRss/148508.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/85940806/services/trackbacks/148508.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">/*</span><span style="color: #008000; ">**<br />*char&nbsp;*memchr(buf,&nbsp;chr,&nbsp;cnt)&nbsp;-&nbsp;search&nbsp;memory&nbsp;for&nbsp;given&nbsp;character.<br />*<br />*Purpose:<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Searches&nbsp;at&nbsp;buf&nbsp;for&nbsp;the&nbsp;given&nbsp;character,&nbsp;stopping&nbsp;when&nbsp;chr&nbsp;is<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;first&nbsp;found&nbsp;or&nbsp;cnt&nbsp;bytes&nbsp;have&nbsp;been&nbsp;searched&nbsp;through.<br />*<br />*Entry:<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;*buf&nbsp;&nbsp;-&nbsp;memory&nbsp;buffer&nbsp;to&nbsp;be&nbsp;searched<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;chr&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;character&nbsp;to&nbsp;search&nbsp;for<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;cnt&nbsp;-&nbsp;max&nbsp;number&nbsp;of&nbsp;bytes&nbsp;to&nbsp;search<br />*<br />*Exit:<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returns&nbsp;pointer&nbsp;to&nbsp;first&nbsp;occurence&nbsp;of&nbsp;chr&nbsp;in&nbsp;buf<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returns&nbsp;NULL&nbsp;if&nbsp;chr&nbsp;not&nbsp;found&nbsp;in&nbsp;the&nbsp;first&nbsp;cnt&nbsp;bytes<br />*<br />*Exceptions:<br />*<br />******************************************************************************</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;__cdecl&nbsp;memchr&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;buf,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;chr,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;cnt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(&nbsp;cnt&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(unsigned&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)buf&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;(unsigned&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">)chr)&nbsp;)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(unsigned&nbsp;</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)buf&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">(cnt&nbsp;</span><span style="color: #000000; ">?</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)buf&nbsp;:&nbsp;NULL);<br />}</span></div><img src ="http://www.cppblog.com/85940806/aggbug/148508.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/85940806/" target="_blank">Mike Song</a> 2011-06-11 22:11 <a href="http://www.cppblog.com/85940806/archive/2011/06/11/148508.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>14 - memcpy and memmove difference</title><link>http://www.cppblog.com/85940806/archive/2011/06/11/148507.html</link><dc:creator>Mike Song</dc:creator><author>Mike Song</author><pubDate>Sat, 11 Jun 2011 14:09:00 GMT</pubDate><guid>http://www.cppblog.com/85940806/archive/2011/06/11/148507.html</guid><wfw:comment>http://www.cppblog.com/85940806/comments/148507.html</wfw:comment><comments>http://www.cppblog.com/85940806/archive/2011/06/11/148507.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/85940806/comments/commentRss/148507.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/85940806/services/trackbacks/148507.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">/*</span><span style="color: #008000; ">**<br />*memmove&nbsp;-&nbsp;Copy&nbsp;source&nbsp;buffer&nbsp;to&nbsp;destination&nbsp;buffer<br />*<br />*Purpose:<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memmove()&nbsp;copies&nbsp;a&nbsp;source&nbsp;memory&nbsp;buffer&nbsp;to&nbsp;a&nbsp;destination&nbsp;memory&nbsp;buffer.<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;routine&nbsp;recognize&nbsp;overlapping&nbsp;buffers&nbsp;to&nbsp;avoid&nbsp;propogation.<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;cases&nbsp;where&nbsp;propogation&nbsp;is&nbsp;not&nbsp;a&nbsp;problem,&nbsp;memcpy()&nbsp;can&nbsp;be&nbsp;used.<br />*<br />*Entry:<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;*dst&nbsp;=&nbsp;pointer&nbsp;to&nbsp;destination&nbsp;buffer<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;void&nbsp;*src&nbsp;=&nbsp;pointer&nbsp;to&nbsp;source&nbsp;buffer<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;count&nbsp;=&nbsp;number&nbsp;of&nbsp;bytes&nbsp;to&nbsp;copy<br />*<br />*Exit:<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns&nbsp;a&nbsp;pointer&nbsp;to&nbsp;the&nbsp;destination&nbsp;buffer<br />*<br />*Exceptions:<br />******************************************************************************</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;__cdecl&nbsp;mymemcpy&nbsp;(<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;dst,<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;src,<br />&nbsp;&nbsp;size_t&nbsp;count<br />&nbsp;&nbsp;)<br />{<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;ret&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;dst;<br />&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />&nbsp;&nbsp;*&nbsp;copy&nbsp;from&nbsp;lower&nbsp;addresses&nbsp;to&nbsp;higher&nbsp;addresses<br />&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(count</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)dst&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)src;<br />&nbsp;&nbsp;&nbsp;&nbsp;dst&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)dst&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;src&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)src&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">(ret);<br />}<br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;__cdecl&nbsp;mymemmove&nbsp;(<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;dst,<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;src,<br />&nbsp;&nbsp;size_t&nbsp;count<br />&nbsp;&nbsp;)<br />{<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;ret&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;dst;<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(dst&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;src&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)dst&nbsp;</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">&nbsp;((</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)src&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;count))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Non-Overlapping&nbsp;Buffers<br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;copy&nbsp;from&nbsp;lower&nbsp;addresses&nbsp;to&nbsp;higher&nbsp;addresses<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(count</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)dst&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)src;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dst&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)dst&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)src&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Overlapping&nbsp;Buffers<br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;copy&nbsp;from&nbsp;higher&nbsp;addresses&nbsp;to&nbsp;lower&nbsp;addresses<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;dst&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)dst&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;count&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;src&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)src&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;count&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(count</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)dst&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)src;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dst&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)dst&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)src&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">(ret);<br />}<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;_tmain(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;argc,&nbsp;_TCHAR</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;argv[])<br />{<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a[</span><span style="color: #000000; ">10</span><span style="color: #000000; ">];<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(i;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;a[i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;i;<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;mymemcpy(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">a[</span><span style="color: #000000; ">4</span><span style="color: #000000; ">],&nbsp;a,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">)</span><span style="color: #000000; ">*</span><span style="color: #000000; ">6</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,a[i]);<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;a[i]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;i;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;mymemmove(</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">a[</span><span style="color: #000000; ">4</span><span style="color: #000000; ">],&nbsp;a,&nbsp;</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">)</span><span style="color: #000000; ">*</span><span style="color: #000000; ">6</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">10</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,a[i]);<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000;">;<br />}<br /><br /><br />Result:<br />0 1 2 3 0 1 2 3 0 1<br />0 1 2 3 0 1 2 3 4 5<br /><br /></span></div><img src ="http://www.cppblog.com/85940806/aggbug/148507.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/85940806/" target="_blank">Mike Song</a> 2011-06-11 22:09 <a href="http://www.cppblog.com/85940806/archive/2011/06/11/148507.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>13 - memmove</title><link>http://www.cppblog.com/85940806/archive/2011/06/11/148506.html</link><dc:creator>Mike Song</dc:creator><author>Mike Song</author><pubDate>Sat, 11 Jun 2011 13:52:00 GMT</pubDate><guid>http://www.cppblog.com/85940806/archive/2011/06/11/148506.html</guid><wfw:comment>http://www.cppblog.com/85940806/comments/148506.html</wfw:comment><comments>http://www.cppblog.com/85940806/archive/2011/06/11/148506.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/85940806/comments/commentRss/148506.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/85940806/services/trackbacks/148506.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">/*</span><span style="color: #008000; ">**<br />*memmove&nbsp;-&nbsp;Copy&nbsp;source&nbsp;buffer&nbsp;to&nbsp;destination&nbsp;buffer<br />*<br />*Purpose:<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memmove()&nbsp;copies&nbsp;a&nbsp;source&nbsp;memory&nbsp;buffer&nbsp;to&nbsp;a&nbsp;destination&nbsp;memory&nbsp;buffer.<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;routine&nbsp;recognize&nbsp;overlapping&nbsp;buffers&nbsp;to&nbsp;avoid&nbsp;propogation.<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;cases&nbsp;where&nbsp;propogation&nbsp;is&nbsp;not&nbsp;a&nbsp;problem,&nbsp;memcpy()&nbsp;can&nbsp;be&nbsp;used.<br />*<br />*Entry:<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;*dst&nbsp;=&nbsp;pointer&nbsp;to&nbsp;destination&nbsp;buffer<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;void&nbsp;*src&nbsp;=&nbsp;pointer&nbsp;to&nbsp;source&nbsp;buffer<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;count&nbsp;=&nbsp;number&nbsp;of&nbsp;bytes&nbsp;to&nbsp;copy<br />*<br />*Exit:<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns&nbsp;a&nbsp;pointer&nbsp;to&nbsp;the&nbsp;destination&nbsp;buffer<br />*<br />*Exceptions:<br />******************************************************************************</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;__cdecl&nbsp;memmove&nbsp;(<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;dst,<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;src,<br />&nbsp;&nbsp;size_t&nbsp;count<br />&nbsp;&nbsp;)<br />{<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;ret&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;dst;<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(dst&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;src&nbsp;</span><span style="color: #000000; ">||</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)dst&nbsp;</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">&nbsp;((</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)src&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;count))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Non-Overlapping&nbsp;Buffers<br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;copy&nbsp;from&nbsp;lower&nbsp;addresses&nbsp;to&nbsp;higher&nbsp;addresses<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(count</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)dst&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)src;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dst&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)dst&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)src&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/*</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Overlapping&nbsp;Buffers<br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;copy&nbsp;from&nbsp;higher&nbsp;addresses&nbsp;to&nbsp;lower&nbsp;addresses<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;dst&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)dst&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;count&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;src&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)src&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;count&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(count</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)dst&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)src;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dst&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)dst&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)src&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">(ret);<br />}<br /></span></div><img src ="http://www.cppblog.com/85940806/aggbug/148506.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/85940806/" target="_blank">Mike Song</a> 2011-06-11 21:52 <a href="http://www.cppblog.com/85940806/archive/2011/06/11/148506.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>12 - memset </title><link>http://www.cppblog.com/85940806/archive/2011/06/11/148505.html</link><dc:creator>Mike Song</dc:creator><author>Mike Song</author><pubDate>Sat, 11 Jun 2011 13:32:00 GMT</pubDate><guid>http://www.cppblog.com/85940806/archive/2011/06/11/148505.html</guid><wfw:comment>http://www.cppblog.com/85940806/comments/148505.html</wfw:comment><comments>http://www.cppblog.com/85940806/archive/2011/06/11/148505.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/85940806/comments/commentRss/148505.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/85940806/services/trackbacks/148505.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">/*</span><span style="color: #008000; ">**<br />*char&nbsp;*memset(dst,&nbsp;val,&nbsp;count)&nbsp;-&nbsp;sets&nbsp;"count"&nbsp;bytes&nbsp;at&nbsp;"dst"&nbsp;to&nbsp;"val"<br />*<br />*Purpose:<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets&nbsp;the&nbsp;first&nbsp;"count"&nbsp;bytes&nbsp;of&nbsp;the&nbsp;memory&nbsp;starting<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;"dst"&nbsp;to&nbsp;the&nbsp;character&nbsp;value&nbsp;"val".<br />*<br />*Entry:<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;*dst&nbsp;-&nbsp;pointer&nbsp;to&nbsp;memory&nbsp;to&nbsp;fill&nbsp;with&nbsp;val<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;val&nbsp;&nbsp;&nbsp;-&nbsp;value&nbsp;to&nbsp;put&nbsp;in&nbsp;dst&nbsp;bytes<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;count&nbsp;-&nbsp;number&nbsp;of&nbsp;bytes&nbsp;of&nbsp;dst&nbsp;to&nbsp;fill<br />*<br />*Exit:<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returns&nbsp;dst,&nbsp;with&nbsp;filled&nbsp;bytes<br />*<br />*Exceptions:<br />*<br />******************************************************************************</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;__cdecl&nbsp;memset&nbsp;(<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">dst,<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;val,<br />&nbsp;&nbsp;size_t&nbsp;count<br />&nbsp;&nbsp;)<br />{<br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">start&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;dst;<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(count</span><span style="color: #000000; ">--</span><span style="color: #000000; ">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)dst&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">)val;<br />&nbsp;&nbsp;&nbsp;&nbsp;dst&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">)dst&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br /><br />&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">(start);<br />}</span></div><img src ="http://www.cppblog.com/85940806/aggbug/148505.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/85940806/" target="_blank">Mike Song</a> 2011-06-11 21:32 <a href="http://www.cppblog.com/85940806/archive/2011/06/11/148505.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>