C語言sprintf與sscanf函式 總結

2021-09-23 19:23:36 字數 3553 閱讀 6465

1、前言

2、sprintf函式

sprintf函式原型為int sprintf(char *str, const char *format, ...)。作用是格式化字串,具體功能如下所示:

(1)將數字變數轉換為字串。

(2)得到整型變數的16進製制和8進製字串。

(3)連線多個字串。

舉例如下所示:

1

char str[256] = ;

2int data = 1024;3

//將data轉換為字串

4 sprintf(str,"%d"

,data);5//

獲取data的十六進製制

6 sprintf(str,"

0x%x

",data);7//

獲取data的八進位制

8 sprintf(str,"

0%o"

,data);

9const

char *s1 = "

hello";

10const

char *s2 = "

world";

11//

連線字串s1和s2

12 sprintf(str,"

%s %s

",s1,s2);

3、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 可以看成% 的乙個特例 %[^ ](注意^後面有乙個空格!)

解析**的例子如下所示:

1

const

char *s = "

";2char protocol[32] = ;

3char host[128] = ;

4char port[8] = ;

5 sscanf(s,"

%[^:]://%[^:]:%[1-9]

",protocol,host,port);

67 printf("

protocol: %s\n

",protocol);

8 printf("

host: %s\n

",host);

9 printf("

port: %s\n

",port);

10

4、snprintf函式snprintf函式是sprintf函式的更加安全版本,考慮到字串的位元組數,防止了字串溢位。函式形式為:int snprintf(char *restrict buf, size_t n, const char * restrict  format, ...);。最多從源串中拷貝n-1個字元到目標串中,然後再在後面加乙個0。所以如果目標串的大小為n 的話,將不會溢位。

5、測試程式

本次採用ip位址和整型之間的轉換,mac位址轉換作為測試程式,整個程式如下所示:

1 #include 2 #include 3

4#define ip_str_len 18

5#define mac_str_len 18

6#define mac_bit_len 6

7#define little_endian 0

8#define big_endian 1

910 typedef unsigned char

uchar;

11 typedef unsigned int

uint;12

13int

big_little_endian()

1420

21uint ipstr2int(const

char *ipstr)

2234

35char *int2ipstr(const

uint ip, char *ipstr, const

uint

ip_str_len)

3653

55char *mac2str(const unsigned char *mac,char *mac_str,const

uint

mac_str_len)

5662

63int

main()64;

66char mac_str[mac_str_len] = ;

67 unsigned char mac[mac_bit_len] = ;

68const

char *ipstr = "

10.0.3.193";

69 unsigned int

ip;70 int2ipstr(167773121

,ip_str,ip_str_len);

71mac2str(mac,mac_str,mac_str_len);

72 ip =ipstr2int(ipstr);

73 printf("

%s\n

",ip_str);

74 printf("

%s\n

",mac_str);

75 printf("

ip:%u\n

",ip);

76return0;

77 }

程式執行結果如下所示:

C語言sprintf與sscanf函式

原文 1 前言 2 sprintf函式 sprintf函式原型為int sprintf char str,const char format,作用是格式化字串,具體功能如下所示 1 將數字變數轉換為字串。2 得到整型變數的16進製制和8進製字串。3 連線多個字串。3 sscanf函式 sscanf函...

C語言sprintf 函式

int sprintf char str,const char format,傳送格式化輸出到str所指向的字串。下面是 sprintf 函式的宣告。int sprintf char str,const char format,如果成功,則返回寫入的字元總數,不包括字串追加在字串末尾的空字元。如果失...

C語言sprintf與sscanf函式 總結

1 前言 2 sprintf函式 sprintf函式原型為int sprintf char str,const char format,作用是格式化字串,具體功能如下所示 1 將數字變數轉換為字串。2 得到整型變數的16進製制和8進製字串。3 連線多個字串。舉例如下所示 1 char str 256...