UNIX網路程式設計學習(12)--對兩個數求和的str_echo函式-以及sscanf的用法
//tcpcliserv/str_echo08.c
#include "unp.h"
void
str_echo(int sockfd)
{
long arg1,arg2;
ssize_t n;
char line[MAXLINE];//#define MAXLINE 4096
for( ; ;)
{
if( (n = Readline(sockfd,line,MAXLINE))==0)
return;
if( sscanf(line,"%ld%ld",&arg1,&arg2) == 2)
snprintf(line,sizeof(line),"%ld\n",arg1+arg2);
else
snprintf(line,sizeof(line),"input error\n");
n = strlen(line);
Writen(sockfd,line,n);
}
}
名稱:
sscanf() - 從一個字串中讀進與指定格式相符的資料.
函式原型:
int sscanf( string str, string fmt, mixed var1, mixed var2 ... );
int scanf( const char *format [,argument]... );
說明:
sscanf與scanf類似,都是用於輸入的,只是後者以螢幕(stdin)為輸入源,前者以固定字串為輸入源。
其中的format可以是一個或多個 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符號}
注:
1、 * 亦可用於格式中, (即 %*d 和 %*s) 加了星號 (*) 表示跳過此資料不讀入. (也就是不把此資料讀入引數中)
2、{a|b|c}表示a,b,c中選一,[d],表示可以有d也可以沒有d。
3、width表示讀取寬度。
4、{h | l | I64 | L}:引數的size,通常h表示單位元組size,I表示2位元組 size,L表示4位元組size(double例外),l64表示8位元組size。
5、type :這就很多了,就是%s,%d之類。
6、特別的:%*[width] [{h | l | I64 | L}]type表示滿足該條件的被過濾掉,不會向目標引數中寫入值
支援集合操作:
%[a-z] 表示匹配a到z中任意字元,貪婪性(儘可能多的匹配)
%[aB'] 匹配a、B、'中一員,貪婪性
%[^a] 匹配非a的任意字元,貪婪性
例子:
1. 常見用法。
char buf[512] = {0}; sscanf("123456 ","%s", buf); printf("%s\n",buf); 結果為:123456 |
2. 取指定長度的字串。如在下例中,取最大長度為4位元組的字串。
sscanf("123456 ","%4s", buf); printf("%s\n",buf); 結果為:1234 |
3. 取到指定字元為止的字串。如在下例中,取遇到空格為止字串。
sscanf("123456 abcdedf","%[^ ]", buf); printf("%s\n",buf); 結果為:123456 |
4. 取僅包含指定字符集的字串。如在下例中,取僅包含1到9和小寫字母的字串。
sscanf("123456abcdedfBCDEF","%[1-9a-z]", buf); printf("%s\n",buf); 結果為:123456abcdedf |
5. 取到指定字符集為止的字串。如在下例中,取遇到大寫字母為止的字串。
sscanf("123456abcdedfBCDEF","%[^A-Z]", buf); printf("%s\n",buf); 結果為:123456abcdedf |
6、給定一個字串iios/12DDWDFF@122,獲取 / 和 @之間的字串,先將 "iios/"過濾掉,再將非'@'的一串內容送到buf中
sscanf("iios/12DDWDFF@122","%*[^/]/%[^@]", buf); printf("%s\n",buf); 結果為:12DDWDFF |
7、給定一個字串““hello, world”,僅保留world。(注意:“,”之後有一空格)
sscanf(“hello, world”,"%*s%s", buf); printf("%s\n",buf); 結果為:world %*s表示第一個匹配到的%s被過濾掉,即hello被過濾了 如果沒有空格則結果為NULL。 |
相關文章
- C語言函式sscanf()的用法C語言函式
- UNIX網路程式設計學習(9)--getsockname和getpeername的用法及例項程式設計
- UNIX網路程式設計學習(13)--使用select的str_cli函式的實現程式設計函式
- 人人都能學會的python程式設計教程12:函式的引數Python程式設計函式
- UNIX網路程式設計學習(4)--值-結果引數程式設計
- 如何開始函式程式設計的學習?函式程式設計
- 12 個最佳的免費學習程式設計的遊戲網站程式設計遊戲網站
- Linux/Unix C程式設計之的perror函式,strerror函式,errnoLinuxC程式程式設計Error函式
- 《神經網路和深度學習》系列文章十一:關於損失函式的兩個假設神經網路深度學習函式
- Note -「因數的尤拉函式求和」函式
- Python 中求和函式 sum 用法Python函式
- 雲端計算學習路線圖素材、課件,mysql中函式的用法MySql函式
- 好程式設計師大資料學習路線分享函式+map對映+元祖程式設計師大資料函式
- Python中可迭代物件、迭代器以及iter()函式的兩個用法詳解Python物件函式
- UNIX網路程式設計學習(16)--使用poll的TCP伺服器程式程式設計TCP伺服器
- JavaScript函數語言程式設計學習JavaScript函數程式設計
- excel統計大於15小於20的數並求和 統計區間個數的函式Excel函式
- JavaScript函數語言程式設計(純函式、柯里化以及組合函式)JavaScript函數程式設計函式
- UNIX網路程式設計學習(14)--使用select正確處理EOF的str_cli函式修訂版程式設計函式
- 物聯網學習教程—函式引數和函式的值函式
- 【程式設計測試題】素數對、不要二、求和程式設計
- go 學習筆記之學習函數語言程式設計前不要忘了函式基礎Go筆記函數程式設計函式
- 好程式設計師學習筆記:函式程式設計師筆記函式
- 一個程式設計師的數學學習探索之旅程式設計師
- Haskell學習-函數語言程式設計初探Haskell函數程式設計
- 深入學習javascript函數語言程式設計JavaScript函數程式設計
- JavaScript學習(3):函數語言程式設計JavaScript函數程式設計
- ASP.NET網路程式設計常用的27個函式ASP.NET程式設計函式
- 好程式設計師web前端學習路線分享函式基礎程式設計師Web前端函式
- 好程式設計師大資料學習路線分享UDF函式程式設計師大資料函式
- 我對函數語言程式設計的理解函數程式設計
- 對函數語言程式設計的誤解函數程式設計
- 我在學習程式設計中犯的兩個最大錯誤程式設計
- 計算兩個日期相差的天數,Calendar用法
- 物件導向程式設計之super內建函式的用法物件程式設計函式
- 網際網路廣告的兩個變數變數
- 推薦12個免費學程式設計的好網站程式設計網站
- python程式設計學習筆記⑦-1函式Python程式設計筆記函式