sscanf sprintf的常見用法

2021-09-10 16:37:37 字數 2941 閱讀 9360

功能

把格式化的資料寫入某個字串

緩衝區。

原型

int sprintf( char *buffer, const char *format, [ argument] … );

引數列表

buffer:char型指標,指向將要寫入的字串的緩衝區。

format:格式化字串。

[argument]...:可選引數,可以是任何型別的資料。

返回值

返回寫入buffer 的字元數,出錯則返回-1.

格式化數字字串
//把整數123列印成乙個字串儲存在s中。

sprintf(s, "%d", 123);   // "123"

//可以指定寬度,不足的左邊補空格:

sprintf(s, "%8d%8d", 123, 4567); // "     123    4567"

//當然也可以左對齊:

sprintf(s, "%-8d%8d", 123, 4567); // "123    4567"

//也可以按照16進製制列印:

sprintf(s, "%8x", 4567); //小寫16進製制,寬度佔8個位置,右對齊

sprintf(s, "%-8x", 4568); //大寫16進製制,寬度佔8個位置,左對齊

控制浮點數列印格式(預設保留小數點後6位)

sprintf(s, "%f", 3.1415926);    // "3.141593"
有時我們希望自己控制列印的寬度和小數字數,這時就應該使用:」%m.nf」 格式,其中m表示列印的寬度,n表示小數點後的位數。

注意:會四捨五入。

sprintf(s, "%10.3f", 3.1415626);   // "     3.142"

sprintf(s, "%-10.3f", 3.1415626);  // "3.142     "

sprintf(s, "%.3f", 3.1415626);     // "3.142"

對於如下**:

int i = 123;

sprintf(s, "%.3f", i);

其結果是什麼? 「0.000」。。 

原因是引數壓棧時呼叫者並不知道跟 i 相對應的格式控制符是個」%f」。而函式執行時函式本身則並不知道當年被壓入棧裡的是個整數,於是儲存整數 i 的那4個位元組就被強行作為浮點數格式來解釋了,導致出錯了

sprintf(s, "%.3f", (float)i);     // 結果為 "123.000"
功能

sscanf 讀取格式化的字串中的資料。

常見用法
char buf[512]; 

sscanf("123456 ", "%s", buf);

printf("%s\n", buf); // "123456"

取指定長度的字串。如在下例中,取最大長度為4位元組的字串

sscanf("123456 ", "%4s", buf); 

printf("%s\n", buf); // "1234"

取到指定字元為止的字串。如在下例中,取遇到空格為止字串

sscanf("123456 abcdedf", "%[^ ]", buf); 

printf("%s\n", buf); // "123456"

取僅包含指定字符集的字串。如在下例中,取僅包含1到9和小寫字母的字串

sscanf("123456abcdedfbcdef", "%[1-9a-z]", buf); 

printf("%s\n", buf); // "123456abcdedf"

char s = "abcdef 1987:10:20";

char buf[512];

sscanf(s, "%[a-z0-9, ,:]", buf); // "abcdef 1987:10:20"

取到指定字符集為止的字串。如在下例中,取遇到大寫字母為止的字串

sscanf("123456abcdedfbcdef", "%[^a-z]", buf); 

printf("%s\n", buf); // "123456abcdedf"

給定乙個字串」iios/12ddwdff@122」,獲取 / 和 @ 之間的字串,先將 「iios/」過濾掉,再將非』@』的一串內容送到buf中

sscanf("iios/12ddwdff@122", "%*[^/]/%[^@]", buf); 

printf("%s\n", buf); // "12ddwdff"

給定乙個字串「「hello, world」,僅保留world。(注意:「,」之後有一空格)

sscanf(「hello, world」, "%*s%s", buf); //%*s表示第乙個匹配到的%s被過濾掉,即hello被過濾了,如果沒有空格則結果為null。

printf("%s\n", buf); // "world"

參考:突然好想曬太陽

格式轉化函式 sscanf, sprintf

標頭檔案 stdio.h 簡介1.對於字串與數值的相互轉換,使用sscanf和sprintf相當方便。我曾經由於忘記sscanf這個函式,自己用遞迴和迴圈,寫了乙個從字串轉換為雙精度的函式。2.從數值到字串可以用sprintf 從字串到數值可以用sscanf。3.sprintf函式可以對字元陣列進行...

C語言 sscanf,sprintf函式 使用總結

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

常成員,常函式,常物件

知識點1.常物件中的任何型別的資料成員 無論私有還是公有 的值都不能被改變。知識點2.常物件能呼叫的 1.公有的常成員函式 2.建構函式 3.公有的靜態函式 知識點3.常物件與常成員函式只有同時存在才都有意義 知識點4.普通物件既可以呼叫常成員函式,也可以呼叫非常成員函式 知識點5.常成員函式不能更...