sscanf 和 sprintf的用法

2021-07-09 02:28:37 字數 3122 閱讀 6101

一、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...