<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[[实践OK]字符串截取函数--C语言memcpy函数,拷贝二进制的包体只能这个函数了，相关函数不能用的。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Unix/LinuxC技术]]></category>
<pubDate>Thu, 02 Apr 2015 08:59:43 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：C语言不如PHP语言在字符串处理上有较大的灵活性，如取一个字符串的前N个可以有strncpy，但是如果想取从第N位的后M个字符怎么办？得自己写。<br/>其实有strstr结合memncpy来做这个事情，c指针字符串指针查到某个串后指向哪儿并找到一个位置后，如何拷贝此时指针位置前面的字符串，链接在：http://jackxiang.com/post/7933/<br/><br/>你上传的文件是二进制的，而strstr是字符串处理函数，遇到&#92;0就不会往后继续查找了。strlen也是字符串处理函数。这种情况，拷贝使用memcpy，程序记住拷贝的len，查找需要自己用指针移动实现。<br/>昨天不是说过了么，二进制数据不能使用字符串处理函数<br/>罗毅峰拷贝一个上传具有二进制的包体的相关字符串不用用的拷贝方法：<br/><a href="attachment.php?fid=428">点击这里下载文件</a><br/><br/>recvlen就是总长度吧,p = strstr(szTmpBuf,headerSepFlag);//p指向这个&#92;r&#92;n&#92;r&#92;n 的这儿：<br/>后，用p-szTmpBuf 也就是这个http的header长度。<br/>再用recvLen 就是总长度，recvLen-(p-szTmpBuf) 这就是body的长度，<br/>后再用： memcpy(httpBody,p+4,recvLen-(p-szTmpBuf));&nbsp;&nbsp;就能拷贝进去？<br/>罗毅峰新&nbsp;&nbsp;10:49:45<br/>yes<br/>szTmpBuf也是指针，指针减指针，得到的是距离长度。szTmpBuf和p都是char *类型<br/>——————————————————————————————————<br/><textarea name="code" class="C" rows="15" cols="100">
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
main()
&#123;
&nbsp;&nbsp;&nbsp;&nbsp;char content[10];
&nbsp;&nbsp;&nbsp;&nbsp;char *s=&quot;Golden Global View&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;char *l=&quot;lob&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;char *p;
&nbsp;&nbsp;&nbsp;&nbsp;p=strstr(s,l);
&nbsp;&nbsp;&nbsp;&nbsp;if(p)&#123;
&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;p=%s&#92;n&quot;,p);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;memcpy(content,p+2,strlen(p)); 
&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;content = %s&#92;n&quot;,content);

&nbsp;&nbsp;&nbsp;&nbsp;&#125; 
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Not Found!&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&#125;

</textarea><br/><br/>[root@iZ25dcp92ckZ multepoolserver]# gcc strstr.c&nbsp;&nbsp;-o strstr<br/>[root@iZ25dcp92ckZ multepoolserver]# ./strstr <br/>p=lobal View<br/>content = bal View<br/><br/>————————————————————————————————————————————————————————————————<br/><br/><textarea name="code" class="C" rows="15" cols="100">
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
main()
&#123;
&nbsp;&nbsp;&nbsp;&nbsp;char content[10];
&nbsp;&nbsp;&nbsp;&nbsp;char httpHeader[20];
&nbsp;&nbsp;&nbsp;&nbsp;char *s=&quot;Golden Global View&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;char *l=&quot;lob&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;char *p;
&nbsp;&nbsp;&nbsp;&nbsp;p=strstr(s,l);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;memcpy(httpHeader,s,p-s);
&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;httpHeader=%s&#92;n&quot;,httpHeader);
&nbsp;&nbsp;&nbsp;&nbsp;if(p)&#123;
&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;p=%s&#92;n&quot;,p);
&nbsp;&nbsp;&nbsp;&nbsp;memcpy(content,p+2,strlen(p)); 
&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;content = %s&#92;n&quot;,content);

&nbsp;&nbsp;&nbsp;&nbsp;&#125; 
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Not Found!&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&#125;
</textarea><br/><br/>[root@iZ25dcp92ckZ multepoolserver]# ./strstr <br/>httpHeader=Golden G<br/>p=lobal View<br/>content = bal View<br/><br/>——————————————————————————————————————————————————————————————<br/><br/>这里学习到获得字符串标识位后面的几位：<br/><textarea name="code" class="C" rows="15" cols="100">
char *p,*beginP;//指针专门移动之用
beginP = szTmpBuf;//指向头部
char headerInfo[128]; //header 头数组
char httpBodyInfo[128]; //Body
char headerSepFlag[8] = &quot;&#92;r&#92;n&#92;r&#92;n&quot;;

int headerSepFlagLen = strlen(headerSepFlag);
for(p=szTmpBuf; p!=NULL &amp;&amp; *p!=&#039;&#92;0&#039;; p++)&#123;
&nbsp;&nbsp;&nbsp;&nbsp;if(!strncmp(p,headerSepFlag,headerSepFlagLen))&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&#125;
memcpy(headerInfo, szTmpBuf, int(p-beginP));
printf(&quot;body body body =%d&#92;n&quot;,p-beginP);

int ii=0;
//是pch指针指向pos位置。&nbsp;&nbsp;&nbsp;&nbsp;
while(*p != &#039;&#92;0&#039;)&nbsp;&nbsp;&nbsp;&nbsp;
&#123;
&nbsp;&nbsp;&nbsp;&nbsp;httpBodyInfo[ii]=*(p++);&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;ii++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;//循环遍历赋值数组。&nbsp;&nbsp;&nbsp;&nbsp;
&#125;

printf(&quot;headerInfo =%s&#92;n&quot;,headerInfo);
printf(&quot;bodyInfo print=%s&#92;n&quot;,httpBodyInfo); 
 
</textarea>
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践OK]字符串截取函数--C语言memcpy函数,拷贝二进制的包体只能这个函数了，相关函数不能用的。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>