﻿<?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++博客-persistence</title><link>http://www.cppblog.com/liangbo/</link><description>Software Architecture</description><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 10:14:13 GMT</lastBuildDate><pubDate>Thu, 23 Apr 2026 10:14:13 GMT</pubDate><ttl>60</ttl><item><title>csv文件的妙用</title><link>http://www.cppblog.com/liangbo/archive/2007/07/04/27476.html</link><dc:creator>bo</dc:creator><author>bo</author><pubDate>Wed, 04 Jul 2007 06:45:00 GMT</pubDate><guid>http://www.cppblog.com/liangbo/archive/2007/07/04/27476.html</guid><wfw:comment>http://www.cppblog.com/liangbo/comments/27476.html</wfw:comment><comments>http://www.cppblog.com/liangbo/archive/2007/07/04/27476.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liangbo/comments/commentRss/27476.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liangbo/services/trackbacks/27476.html</trackback:ping><description><![CDATA[CSV全称&nbsp;Comma&nbsp;Separated&nbsp;values，是一种用来存储数据的纯文本<br>文件格式，通常用于电子表格或数据库软件。有简单易用，占用存储字节少的特点。<br>
<p>规则</p>
<p>0&nbsp;开头是不留空，以行为单位。<br>1&nbsp;可含或不含列名，含列名则居文件第一行。<br>2&nbsp;一行数据不垮行，无空行。<br>3&nbsp;以半角符号（ASCII），作分隔符，列为空也要表达其存在。<br>4&nbsp;列内容如存在，，则用&#8220;&#8221;包含起来。<br>5&nbsp;列内容如存在&#8220;&#8221;则用&#8220;&#8221;&#8220;&#8221;包含。<br>6&nbsp;文件读写时引号，逗号操作规则互逆。<br>7&nbsp;内码格式不限，可为ASCII、Unicode或者其他。</p>
<img src ="http://www.cppblog.com/liangbo/aggbug/27476.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liangbo/" target="_blank">bo</a> 2007-07-04 14:45 <a href="http://www.cppblog.com/liangbo/archive/2007/07/04/27476.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>泛型程序设计是C++的发展方向或者是出路吗？</title><link>http://www.cppblog.com/liangbo/archive/2007/05/04/23400.html</link><dc:creator>bo</dc:creator><author>bo</author><pubDate>Fri, 04 May 2007 06:03:00 GMT</pubDate><guid>http://www.cppblog.com/liangbo/archive/2007/05/04/23400.html</guid><wfw:comment>http://www.cppblog.com/liangbo/comments/23400.html</wfw:comment><comments>http://www.cppblog.com/liangbo/archive/2007/05/04/23400.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/liangbo/comments/commentRss/23400.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liangbo/services/trackbacks/23400.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
最近看了《C++设计新思维》一书的前几章，总的感觉是不怎么爽。比起以前看《泛型编程 and STL》，boost库起来，感觉该书描述的东西太过于注重模板的技巧，C++是一个编译型的语言，一些动态语言很容易实现的功能C++实现起来就很难，我们完全没有必要硬是用大量的模板来强迫C++在编译期实现这些动态特性。语言只要是好用就行，而现在C++代码里几乎全是模板，并且越来越复杂，不知道以后谁还愿意这样写C++？难道泛型编程就是C++的发展方向吗？
<img src ="http://www.cppblog.com/liangbo/aggbug/23400.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liangbo/" target="_blank">bo</a> 2007-05-04 14:03 <a href="http://www.cppblog.com/liangbo/archive/2007/05/04/23400.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebSite不能发布在含有中文的目录下？</title><link>http://www.cppblog.com/liangbo/archive/2007/04/04/21247.html</link><dc:creator>bo</dc:creator><author>bo</author><pubDate>Wed, 04 Apr 2007 08:49:00 GMT</pubDate><guid>http://www.cppblog.com/liangbo/archive/2007/04/04/21247.html</guid><wfw:comment>http://www.cppblog.com/liangbo/comments/21247.html</wfw:comment><comments>http://www.cppblog.com/liangbo/archive/2007/04/04/21247.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liangbo/comments/commentRss/21247.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liangbo/services/trackbacks/21247.html</trackback:ping><description><![CDATA[<p>今天把网站发布在含中文的路径下，结果访问的时候出现了问题，浏览的时候会出现错误提示：您试图在此 Web 服务器上访问的 Web 应用程序当前不可用。请点击 Web 浏览器中的&#8220;刷新&#8221;按钮重试您的请求。 管理员注意事项: 详述此特定请求失败原因的错误信息可在 Web 服务器的系统事件日志中找到。请检查此日志项以查明导致该错误发生的原因。 <br>后来改到英文目录下就可以了。<br>难道WebSite不能发布在中文目录下？</p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/liangbo/aggbug/21247.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liangbo/" target="_blank">bo</a> 2007-04-04 16:49 <a href="http://www.cppblog.com/liangbo/archive/2007/04/04/21247.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转载:Sizeof与Strlen的区别与联系</title><link>http://www.cppblog.com/liangbo/archive/2006/10/06/13394.html</link><dc:creator>bo</dc:creator><author>bo</author><pubDate>Fri, 06 Oct 2006 02:40:00 GMT</pubDate><guid>http://www.cppblog.com/liangbo/archive/2006/10/06/13394.html</guid><wfw:comment>http://www.cppblog.com/liangbo/comments/13394.html</wfw:comment><comments>http://www.cppblog.com/liangbo/archive/2006/10/06/13394.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/liangbo/comments/commentRss/13394.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liangbo/services/trackbacks/13394.html</trackback:ping><description><![CDATA[
		<p>
		</p>
		<p>
				<strong>
				</strong>
		</p>strlen与sizeof的区别<br /><br />1.sizeof操作符的结果类型是size_t，它在头文件中typedef为unsigned　int类型。<br />该类型保证能容纳实现所建立的最大对象的字节大小。 
<p></p><p>2.sizeof是算符，strlen是函数。 </p><p>3.sizeof可以用类型做参数，strlen只能用char*做参数，且必须是以''\0''结尾的。</p><p>4.数组做sizeof的参数不退化，传递给strlen就退化为指针了。 </p><p>5.大部分编译程序在编译的时候就把sizeof计算过了 是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因 <br /><strong><font color="#3300cc">char str[20]="0123456789";//str是编译期大小已经固定的数组<br />int a=strlen(str); //a=10;//strlen()在运行起确定<br />int b=sizeof(str); //而b=20;//sizeof()在编译期确定</font></strong></p><p>6.strlen的结果要在运行的时候才能计算出来，是用来计算字符串的实际长度，不是类型占内存的大小。 </p><p>7.sizeof后如果是类型必须加括弧，如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。<br /> <font color="#0000ff"><strong>char c;<br /></strong></font><font color="#0000ff"><strong> sizeof c;//变量名可以不加括弧</strong><br /></font> <br />8.当适用了于一个结构类型时或变量， sizeof 返回实际的大小，<br /> 当适用一静态地空间数组， sizeof 归还全部数组的尺寸。<br /> sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸 </p><p>9.数组作为参数传给函数时传的是指针而不是数组，传递的是数组的首地址，<br />如： <br />fun(char [8])<br />fun(char [])<br />都等价于 fun(char *) <br />在C++里参数传递数组永远都是传递指向数组首元素的指针，编译器不知道数组的大小<br />如果想在函数内知道数组的大小， 需要这样做：<br />进入函数后用memcpy拷贝出来，长度由另一个形参传进去 <br />fun(unsiged char *p1, int len)<br />{<br />  unsigned char* buf = new unsigned char[len+1]<br />  memcpy(buf, p1, len);<br />}</p><p>我们能常在用到 sizeof 和 strlen 的时候，通常是计算字符串数组的长度<br />看了上面的详细解释，发现两者的使用还是有区别的，从这个例子可以看得很清楚：</p><p>har str[11]="0123456789";//注意这里str大小因该大于等于11，应考虑'\0'在内，否则编译器会报错<br />int a=strlen(str); //a=10; &gt;&gt;&gt;&gt; strlen 计算字符串的长度，以结束符 0x00 为字符串结束。<br />int b=sizeof(str); //而b=11; &gt;&gt;&gt;&gt; sizeof 计算的则是分配的数组 str[11] 所占的内存空间的大小，不受里面存储的内容改变。  </p><p>上面是对静态数组处理的结果，如果是对指针，结果就不一样了</p><p>char* ss = "0123456789";<br />sizeof(ss) 结果 4 ＝＝＝》ss是指向字符串常量的字符指针，sizeof 获得的是一个指针的之所占的空间,应该是长整型的，所以是4<br />sizeof(*ss) 结果 1 ＝＝＝》*ss是第一个字符 其实就是获得了字符串的第一位'0' 所占的内存空间，是char类型的，占了 1 位strlen(ss)= 10 &gt;&gt;&gt;&gt; 如果要获得这个字符串的长度，则一定要使用 strlen<br /><br />另外,下面的方法可以用于确定该静态数组可以容纳元素的个数：<br />int a[3]={1,2,3};<br />cout &lt;&lt; sizeof a/sizeof ( typeid( a[0] ).name() );</p><img src ="http://www.cppblog.com/liangbo/aggbug/13394.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liangbo/" target="_blank">bo</a> 2006-10-06 10:40 <a href="http://www.cppblog.com/liangbo/archive/2006/10/06/13394.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用信号量机制来完成 防止一个程序被多次运行 的代码</title><link>http://www.cppblog.com/liangbo/archive/2006/08/30/11866.html</link><dc:creator>bo</dc:creator><author>bo</author><pubDate>Wed, 30 Aug 2006 12:48:00 GMT</pubDate><guid>http://www.cppblog.com/liangbo/archive/2006/08/30/11866.html</guid><wfw:comment>http://www.cppblog.com/liangbo/comments/11866.html</wfw:comment><comments>http://www.cppblog.com/liangbo/archive/2006/08/30/11866.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/liangbo/comments/commentRss/11866.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liangbo/services/trackbacks/11866.html</trackback:ping><description><![CDATA[#include "windows.h"<br />#include &lt;iostream.h&gt;<br />int main(int argc, char* argv[])<br />{<br /> HANDLE hMutex=CreateMutex(NULL,TRUE,"test");<br /> if (hMutex)<br /> {<br />  if (ERROR_ALREADY_EXISTS==GetLastError())<br />  {<br />   MessageBox(NULL,"already running","",MB_OK);<br />   return 0;<br />  }<br /> }<br /> while (1)<br /> {<br /> }<br /> <br /> return 0;<br />}<br /><img src ="http://www.cppblog.com/liangbo/aggbug/11866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liangbo/" target="_blank">bo</a> 2006-08-30 20:48 <a href="http://www.cppblog.com/liangbo/archive/2006/08/30/11866.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC Serialize</title><link>http://www.cppblog.com/liangbo/archive/2006/08/28/11793.html</link><dc:creator>bo</dc:creator><author>bo</author><pubDate>Mon, 28 Aug 2006 11:21:00 GMT</pubDate><guid>http://www.cppblog.com/liangbo/archive/2006/08/28/11793.html</guid><wfw:comment>http://www.cppblog.com/liangbo/comments/11793.html</wfw:comment><comments>http://www.cppblog.com/liangbo/archive/2006/08/28/11793.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liangbo/comments/commentRss/11793.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liangbo/services/trackbacks/11793.html</trackback:ping><description><![CDATA[一个类要支持Serializable，必须遵循以下步骤：<br />1。该类必须要继承自CObject<br />2。在该类的头文件中添加DECLARE_SERIAL宏<br />3。在该类的实现文件中添加 IMPLEMENT SERIAL宏<br />4。为该类添加一个缺省构造函数<br />5。在该类中重写Serialize( CArchive&amp; ar )函数<br />之后，该类就可以被Serializable。<img src ="http://www.cppblog.com/liangbo/aggbug/11793.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liangbo/" target="_blank">bo</a> 2006-08-28 19:21 <a href="http://www.cppblog.com/liangbo/archive/2006/08/28/11793.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC Message定制步骤</title><link>http://www.cppblog.com/liangbo/archive/2006/08/28/11792.html</link><dc:creator>bo</dc:creator><author>bo</author><pubDate>Mon, 28 Aug 2006 11:15:00 GMT</pubDate><guid>http://www.cppblog.com/liangbo/archive/2006/08/28/11792.html</guid><wfw:comment>http://www.cppblog.com/liangbo/comments/11792.html</wfw:comment><comments>http://www.cppblog.com/liangbo/archive/2006/08/28/11792.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liangbo/comments/commentRss/11792.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liangbo/services/trackbacks/11792.html</trackback:ping><description><![CDATA[
		<p>例如COMMAND消息：<br />1。在该类头文件中添加函数原形声明：afx_msg void OnAppAbout();<br />2。在该类实现文件中添加宏ON_COMMAND(ID_APP_ABOUT, OnAppAbout)<br />其中ID_APP_ABOUT为菜单项的ID，在Resource.h中定义为整数（可以系统自动定义，也可以手动定义）<br />3。在该类实现文件中添加消息实现函数void CTtApp::OnAppAbout()<br />注：其他类型的消息定制方法类似。</p>
<img src ="http://www.cppblog.com/liangbo/aggbug/11792.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liangbo/" target="_blank">bo</a> 2006-08-28 19:15 <a href="http://www.cppblog.com/liangbo/archive/2006/08/28/11792.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC VS SDK</title><link>http://www.cppblog.com/liangbo/archive/2006/08/17/11373.html</link><dc:creator>bo</dc:creator><author>bo</author><pubDate>Thu, 17 Aug 2006 12:48:00 GMT</pubDate><guid>http://www.cppblog.com/liangbo/archive/2006/08/17/11373.html</guid><wfw:comment>http://www.cppblog.com/liangbo/comments/11373.html</wfw:comment><comments>http://www.cppblog.com/liangbo/archive/2006/08/17/11373.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liangbo/comments/commentRss/11373.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liangbo/services/trackbacks/11373.html</trackback:ping><description><![CDATA[1.SDK 中的各类句柄被封装在MFC中的各类对象中了,注意:这里"各类"是对应的,例如CWnd类封装了窗口句柄,CDC类封装了设备句柄。<br />2.SDK中的函数以::(全局作用域)来标记，例如::MessageBox(...);MFC中则相应的在CWnd类中封装了该函数，名称基本不变MessageBox(...),只是参数不同。<br />3.所以SDK是基于句柄（各类资源以句柄来标识）和API函数的，而MFC是基于类的，MFC的类封装了SDK中相应的句柄和API函数，所以指向MFC中类的对象的指针就充当了SDK中句柄的功能。<img src ="http://www.cppblog.com/liangbo/aggbug/11373.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liangbo/" target="_blank">bo</a> 2006-08-17 20:48 <a href="http://www.cppblog.com/liangbo/archive/2006/08/17/11373.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大家看一下这个问题</title><link>http://www.cppblog.com/liangbo/archive/2006/06/10/8393.html</link><dc:creator>bo</dc:creator><author>bo</author><pubDate>Sat, 10 Jun 2006 12:17:00 GMT</pubDate><guid>http://www.cppblog.com/liangbo/archive/2006/06/10/8393.html</guid><wfw:comment>http://www.cppblog.com/liangbo/comments/8393.html</wfw:comment><comments>http://www.cppblog.com/liangbo/archive/2006/06/10/8393.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/liangbo/comments/commentRss/8393.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liangbo/services/trackbacks/8393.html</trackback:ping><description><![CDATA[
		<p>今天在看一本书附的源代码的时候，发现了一个问题，大家来探讨一下：关于Winsock的<br />下面是两个程序，一个是服务器端的程序，不断在监客户端的连接<br />另外一个是客户端的程序，试图连接服务器端<br />服务器端的程序代码：<br />int main()<br />{<br /> // 创建套节字<br /> SOCKET sListen = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);<br /> if(sListen == INVALID_SOCKET)<br /> {<br />  printf("Failed socket() \n");<br />  return 0;<br /> }<br /> <br /> // 填充sockaddr_in结构<br /> sockaddr_in sin;<br /> sin.sin_family = AF_INET;<br /> sin.sin_port = htons(4567);<br /> sin.sin_addr.S_un.S_addr = INADDR_ANY;<br /> <br /> // 绑定这个套节字到一个本地地址<br /> if(::bind(sListen, (LPSOCKADDR)&amp;sin, sizeof(sin)) == SOCKET_ERROR)<br /> {<br />  printf("Failed bind() \n");<br />  return 0;<br /> }<br /> <br /> // 进入监听模式<br /> if(::listen(sListen, 2) == SOCKET_ERROR)<br /> {<br />  printf("Failed listen() \n");<br />  return 0;<br /> }<br /> <br /> // 循环接受客户的连接请求<br /> sockaddr_in remoteAddr; <br /> int nAddrLen = sizeof(remoteAddr);<br /> SOCKET sClient;<br /> char szText[] = " TCP Server Demo! \r\n";<br /> while(TRUE)<br /> {<br />  // 接受一个新连接<br />  sClient = ::accept(sListen, (SOCKADDR*)&amp;remoteAddr, &amp;nAddrLen);<br />  if(sClient == INVALID_SOCKET)<br />  {<br />   printf("Failed accept()");<br />   continue;<br />  }<br />  <br />  printf(" 接受到一个连接：%s \r\n", inet_ntoa(remoteAddr.sin_addr));</p>
		<p>  // 向客户端发送数据<br />  ::send(sClient, szText, strlen(szText), 0);<br />  // 关闭同客户端的连接<br />  ::closesocket(sClient);<br /> }<br />  <br /> // 关闭监听套节字<br /> ::closesocket(sListen);<br /> ::MessageBox(NULL,"","",MB_OK);<br /> return 0;<br />}<br />大家请注意上面的while循环，在不断监听客户端的连接。除非你手动关闭该服务器程序，否则while循环是不会退出的。那么，问题是：关闭套接字的那段代码始终不会执行（我用MessageBox做了试验，即使是手动关闭该程序，也不会MessageBox），这样，是不是会发生资源泄露呢？难道windows会帮你关闭？</p>
<img src ="http://www.cppblog.com/liangbo/aggbug/8393.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liangbo/" target="_blank">bo</a> 2006-06-10 20:17 <a href="http://www.cppblog.com/liangbo/archive/2006/06/10/8393.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>语言的发展方向</title><link>http://www.cppblog.com/liangbo/archive/2006/04/27/6394.html</link><dc:creator>bo</dc:creator><author>bo</author><pubDate>Thu, 27 Apr 2006 12:14:00 GMT</pubDate><guid>http://www.cppblog.com/liangbo/archive/2006/04/27/6394.html</guid><wfw:comment>http://www.cppblog.com/liangbo/comments/6394.html</wfw:comment><comments>http://www.cppblog.com/liangbo/archive/2006/04/27/6394.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/liangbo/comments/commentRss/6394.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liangbo/services/trackbacks/6394.html</trackback:ping><description><![CDATA[我觉得编程语言越来越向专业性发展，语言服务于特定的领域，发展一种适用于很多领域的语言没有很大价值，当某一领域需要某种合适的语言时，会从现有的语言上改动一些，形成一种新的语言，来解决这个领域中的问题。也就是说，语言越来越小，库越来越多，一种语言的公共子集加上一种合适的库就形成了一种新的语言。我觉得这是以后语言的发展方向。<br />语言只是一门工具，是用来解决某一领域内问题的工具而已，面向问题时，分析，建模，选取合适的语言编码，这都是解决问题的工具。所以，不要为了学习语言而学习语言，应该根据你所面临的问题而学习，选择语言，一般来说，不同适用范围或者适用领域的语言没有优劣之分。<img src ="http://www.cppblog.com/liangbo/aggbug/6394.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liangbo/" target="_blank">bo</a> 2006-04-27 20:14 <a href="http://www.cppblog.com/liangbo/archive/2006/04/27/6394.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>