<?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语言函数sscanf()的用法]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Unix/LinuxC技术]]></category>
<pubDate>Mon, 09 Mar 2015 09:05:21 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：做日志分析，linux C 的开发环境，在对每行日志进行处理的时候，手下一个小伙用的是逐字节拆分成字段（也就是指针）。刚开始没注意，后来每天10几G的日志上来后，发现除了速度特别慢以外，还经常出问题，遇到错误格式的日志就直接崩溃。。。从文件读取数据是一件很麻烦的事，所幸有sscanf()函数，对网络输入数据也就是从一个字符串中读进与指定格式相符的数据并进行分组也是可行的。<br/><br/>在做一道九度上机题时，突然发现sscanf()函数非常有用，就顺便从网上搜集资料整理一下。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sscanf() 的作用：从一个字符串中读进与指定格式相符的数据.<br/>原型: int sscanf (const char *str,const char * format,........);<br/>说明： sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。转换后的结果存于对应的参数内。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 成功则返回参数数目，失败则返回0。<br/>注意：sscanf与scanf类似，都是用于输入的，只是后者以键盘(stdin)为输入源，前者以固定字符串为输入源。<br/>大家都知道sscanf是一个很好用的函数，利用它可以从字符串中取出整数、浮点数和字符串等等。它的使用方法简单，特别对于整数和浮点数来说。<br/>这里就举几个经常用到的例子来说明他的用法，便于大家深刻理解他的用法.<br/><br/><textarea name="code" class="C" rows="15" cols="100">

#include&lt;stdio.h&gt;
#include&lt;stdlib.h&gt;
#include&lt;string.h&gt;

int main()&#123;
&nbsp;&nbsp;char str[100];
&nbsp;&nbsp;//用法一：取指定长度的字符串
&nbsp;&nbsp;sscanf(&quot;12345&quot;,&quot;%4s&quot;,str);
&nbsp;&nbsp;printf(&quot;用法一&#92;nstr = %s&#92;n&quot;,str);

&nbsp;&nbsp;//用法二：格式化时间
&nbsp;&nbsp;int year,month,day,hour,minute,second;
&nbsp;&nbsp;sscanf(&quot;2013/02/13 14:55:34&quot;,&quot;%d/%d/%d %d:%d:%d&quot;,&amp;year,&amp;month,&amp;day,&amp;hour,&amp;minute,&amp;second);
&nbsp;&nbsp;printf(&quot;用法二&#92;ntime = %d-%d-%d %d:%d:%d&#92;n&quot;,year,month,day,hour,minute,second);

&nbsp;&nbsp;//用法三：读入字符串
&nbsp;&nbsp;sscanf(&quot;12345&quot;,&quot;%s&quot;,str);
&nbsp;&nbsp;printf(&quot;用法三&#92;nstr = %s&#92;n&quot;,str);

&nbsp;&nbsp;//用法四：%*d 和 %*s 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)
&nbsp;&nbsp;sscanf(&quot;12345acc&quot;,&quot;%*d%s&quot;,str);
&nbsp;&nbsp;printf(&quot;用法四&#92;nstr = %s&#92;n&quot;,str);

&nbsp;&nbsp;//用法五：取到指定字符为止的字符串。如在下例中，取遇到&#039;+&#039;为止字符串。
&nbsp;&nbsp;sscanf(&quot;12345+acc&quot;,&quot;%[^+]&quot;,str);
&nbsp;&nbsp;printf(&quot;用法五&#92;nstr = %s&#92;n&quot;,str);

&nbsp;&nbsp;//用法六：取到指定字符集为止的字符串。如在下例中，取遇到小写字母为止的字符串。
&nbsp;&nbsp;sscanf(&quot;12345+acc121&quot;,&quot;%[^a-z]&quot;,str);
&nbsp;&nbsp;printf(&quot;用法六&#92;nstr = %s&#92;n&quot;,str);
&nbsp;&nbsp;return 0;
&#125;

</textarea><br/><br/>[root@test sscanf]# gcc sscanf.c <br/>[root@test sscanf]# ./a.out <br/>用法一<br/>str = 1234<br/>用法二<br/>time = 2013-2-13 14:55:34<br/>用法三<br/>str = 12345<br/>用法四<br/>str = acc<br/>用法五<br/>str = 12345<br/>用法六<br/>str = 12345+<br/><br/><br/>同进，我想把http请求里的get的串取出来，怎么办？<br/><textarea name="code" class="C" rows="15" cols="100">
#include&lt;stdio.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
#include&lt;stdlib.h&gt;
#include&lt;string.h&gt;

int main()&#123;
&nbsp;&nbsp;&nbsp;&nbsp;char str[100];
&nbsp;&nbsp;&nbsp;&nbsp;//GET /task HTTP/1.0
&nbsp;&nbsp;&nbsp;&nbsp;sscanf(&quot;GET /task HTTP/1.0&quot;,&quot;GET /%[^HTTP/1.0]&quot;,str);
&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;用法七&#92;nstr = %s&#92;n&quot;,str);

&nbsp;&nbsp;&nbsp;&nbsp;return 0;
&#125;
</textarea><br/>编译运行调试：<br/>[root@test sscanf]# gcc sscanf.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>[root@test sscanf]# ./a.out <br/>用法七<br/>str = task <br/><br/><br/>来自：http://blog.csdn.net/sjf0115/article/details/8579935
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践OK]C语言函数sscanf()的用法]]></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>