一、sprintf
sprint函式原型為int sprintf(char *str, const char *format, ...)。
作用是格式化字串,具體功能如下所示:
(
1)將數字變數轉換為字串。
(
2)得到整型變數的
16進製制和
8進製字串。
(
3)連線多個字串。
舉例如下
char str[256] = ;
int data = 1024;
//將data轉換為字串
sprintf(str,"%d",data);
//獲取data的十六進製制
sprintf(str,"0x%x",data);
//獲取data的八進位制
sprintf(str,"0%o",data);
const char *s1 = "hello";
const char *s2 = "world";
//連線字串s1和s2
sprintf(str,"%s %s",s1,s2);
二、sscanf
函式
sscanf
函式原型為int sscanf(const char *str, const char *format, ...)。將引數
str的字串根據引數
format
字串來轉換並格式化資料,轉換後的結果存於對應的引數內。具體功能如下:
(
1)根據格式從字串中提取資料。如從字串中取出整數、浮點數和字串等。
(
2)取指定長度的字串
(3)
取到指定字元為止的字串
(
4)取僅包含指定字符集的字串
(
5)取到指定字符集為止的字串
sscanf
可以支援格式字元%:
(1)-:
表示範圍,如:
%[1-9]
表示只讀取
1-9這幾個數字
%[a-z]
表示只讀取
a-z小寫字母,類似地
%[a-z]
只讀取大寫字母
(2)^:
表示不取,如:
%[^1]
表示讀取除
'1'以外的所有字元
%[^/]
表示除/
以外的所有字元
(3),:
範圍可以用
","相連線
如%[1-9,a-z]
表示同時取
1-9數字和
a-z小寫字母
(4)
原則:從第乙個在指定範圍內的數字開始讀取,到第乙個不在範圍內的數字結束
%s 可以看成
% 的乙個特例
%[^ ](注意^
後面有乙個空格!
)
解析**的例子如下所示:
const char *s = "";
char protocol[32] = ;
char host[128] = ;
char port[8] = ;
sscanf(s,"%[^:]://%[^:]:%[1-9]",protocol,host,port);
printf("protocol: %s\n",protocol);
printf("host: %s\n",host);
printf("port: %s\n",port);
再比如說解析日曆
char* s = 「2015.08.14」;
int year, month, day;
sscanf(s, 「%d.%d.%d」, &year, &month, &day);
可能還會看到%*[^;];%s,%*c之類的表示式。要注意的事加*表示丟棄的意思
比如說;
const char* s = 「deviceinfo=abcd;connect=127.0.0.1;port=6558;username=lql;pwd=123」;
char szurl[256] = ;
char szip[256]=;
char szport[256] = ;
char szusername[256] = ;
char szpwd[256] = ;
strcpy_s(szurl, sizeof(szurl) – 1, s);
sscanf(szurl, 「%*[^;];%s」, szurl);//去掉deviceinfo=abcd;
sscanf(szurl, 「connect=%[^;]」, szip);
sscanf(szurl, 「%*[^;];%s」, szurl);//去掉connect=…;
sscanf(szurl, 「port=%[^;]」, szport);
sscanf(szurl, 「%*[^;];%s」, szurl);//去掉port=…;
sscanf(szurl, 「username=%[^;]」, szusername);
sscanf(szurl, 「%*[^;];%s」, szurl);//去掉username=…;
sscanf(szurl, 「pwd=%[^;]」, szpwd); ……
再比如說:
scanf(「%d %*c %d」, &a, &b);
如果輸入1n2,因為會丟棄掉中間乙個字元,所以最終結果是a=1,b=2
如果*放在裡面就代表萬用字元了,意思什麼字元都會輸出的意思。
三、格式化函式對應的安全版本
sprintf sprintf_s, sscanf sscanf_s等等。其實用法和上面說到的事一樣的,就是多了乙個緩衝區長度的引數。
sscanf和sprintf的用法
標準庫函式定義 函式在任何平台上都被支援 且保證函式功能一致 基本一致 使得你的同乙個原始碼,在windows編譯執行的結果 和在linux上編譯執行的結果相同。sprintf與sscanf 實際工程中常用的一對函式 sprintf 格式化字串,首字母s表示string sscanf 解析字串 例 ...
sprintf和sscanf的用法
1 sprintf 跟printf 在用法上幾乎一樣,只是列印的目的地不同而已,前者列印到字串中,後者則直接在命令列上輸出。這也導致sprintf 比printf 有用得多。sprintf 是個變參函式,定義如下 int sprintf char buffer,const char format a...
sscanf和sprintf函式的用法
sscanf和sprintf是scanf和printf家族的一對成員,用於處理和分析字串非常強大的兩個函式。標頭檔案 stdio.h 原型 cpp view plain copy intsscanf const char buffer,const char format,intsprintf cha...