sprintf,sscanf函式詳解

2021-09-28 16:28:15 字數 2534 閱讀 7563

一,sprintf函式

原型:int sprintf(char *str, const char *format, ...)

作用是格式化字串,具體功能如下所示:

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

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

(3)連線多個字串。

例子:

int main(int argc, char **ar**)

; const char *s1 = "hello";

const char *s2 = "world";

int data = 1024;

sprintf(str, "%d", data);//十進位制

printf("十進位制data:%s\n",str);

sprintf(str, "0x%x", data);//十六進製制

printf("十六進製制data:%s\n",str);

sprintf(str, "0%o", data);//八進位制

printf("八進位制data:%s\n",str);

sprintf(str,"%s-%s",s1,s2);

printf("data:%s\n",str);

return 0;

}

輸出結果:

十進位制data:1024

十六進製制data:0x400

八進位制data:02000

data:hello-world

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

例子:

int main(int argc, char **ar**)

; 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);

return 0;

}

輸出結果

再看乙個轉換成非字串形式,這裡轉換成整形。在時間字串中提取年月日小時分鐘秒儲存在整形變數中

int main(int argc, char **ar**)

輸出結果

year:2019

month:10

day:3

hour:0

min:1

sec:29

三,snprintf函式

原型:int snprintf(char *restrict buf, size_t n, const char * restrict  format, ...)

snprintf函式是sprintf函式的更加安全版本,考慮到字串的位元組數,防止了字串溢位。最多從源串中拷貝n-1個字元到目標串中,然後再在後面加乙個0。所以如果目標串的大小為n 的話,將不會溢位。

四,fprintf,fscanf函式

這兩個函式和sprintf,sscanf類似。只是把緩衝區換成了檔案。

sprintf sscanf中的乙個小坑

char buf 32 sprintf buf,s,d test 100 char out 32 int i 0 sscanf buf,s,d out,i 這段 開始以為會正常執行,結果卻是crash。sscanf在解析 s的時候遇到空格 指標符號 n才會停止解析,而這個 s後面的逗號基本上是乙個擺...

函式基礎 匿名函式,函式,箭頭函式,立即執行函式

doctype html html lang en head meta charset utf 8 meta name viewport content width device width,initial scale 1.0 title document title head body body ...

函式 常見函式

def fib n if n 1 return 1if n 2 return 1return fib n 1 fib n 2 def hannuo n,a,b,c n 表示有n個盤子 a 代表第乙個塔,開始的塔 b 代表第二個塔,過渡塔 c 代表第三個塔,目標塔 d.在 中n 2,這個分支可以不要,...