C語言庫函數篇1:sscanf用法

1、前言git

本節,咱們將學習C語言庫函數sscanf()的使用,使用sscanf能夠快速的從複雜字符串中獲取本身須要的數據。github

2、基礎知識ide

1.簡介函數

sscanf與scanf相似,都是用於輸入的,只是後者以鍵盤(stdin)爲輸入源,前者以固定字符串爲輸入源。學習

2.函數描述3d

int sscanf(const char buffer, const char format, [argument]...);
參數:
buffer:須要解析的源字符串
format:窗體控件字符串,定義解析字符串的規則,能夠是一個或多個
{%[*] [width] [{h | I | I64 | L}]type | ' ' | '\t' | '\n' | 非%符號}
argument:可選變量,用來存儲按照format規則解析buffer的結果code

注:
(1) 亦可用於格式中, (即 %d 和 %s) 加了星號 () 表示跳過此數據。 (也就是不把此數據讀入參數中)
(2) {a|b|c}表示a,b,c中選一,[d],表示能夠有d也能夠沒有d。
(3) width表示讀取寬度。
(4) {h | l | I64 | L}:參數的size,一般h表示單字節size,I表示2字節 size,L表示 4字節size(double例外),l64表示8字節size。
(5) type :這就不少了,就是%s,%d之類。
(6) 特別的:%*[width] [{h | l | I64 | L}]type 表示知足該條件的被過濾掉, 不會向目標參數中寫入值,失敗返回0 ,不然返回格式化的參數個數
(7) 若是讀取的字符串,不是以空格來分隔的話,就可使用%[]。orm

使用時候須要包含頭文件:#include<stdio.h>blog

3、基礎知識字符串

1.簡單用法

#include <stdio.h>

 char *str = "123456 hello world";

int main(void)
{
  int num = 0;
  char str1[64] = { 0x00 };
  char str2[64] = { 0x00 };

  sscanf(str, "%d %s %", &num, str1, str2);
  printf("num : %d\r\nstr1 : %s\r\nstr2 : %s\r\n", num, str1, str2);

  return 0;
}

執行結果以下:

C語言庫函數篇1:sscanf用法

2.取指定長度字符串

#include <stdio.h>
char *str  = "123456";
int main(void)
{
  char res[64] = { 0x00 };
  sscanf(str, "%4s", res);
  printf("res is: %s\r\n", res);

  return 0;
}

執行結果以下:

C語言庫函數篇1:sscanf用法

3. * 格式使用

(*)表示跳過此數據不讀入,也就是不把數據讀入參數中

#include <stdio.h>

int main(void)
{
  char *str  = "123456hello world";
  char res[64] = { 0x00 };
  char res1[64] = { 0x00 };

  sscanf(str, "%*d%s %s", res, res1);
  printf("res is: %s\r\nres1 is: %s\r\n", res, res1);
  return 0;
}

執行結果以下:

C語言庫函數篇1:sscanf用法

4. %[]格式使用

(1) 獲取遇到指定字符爲止的字符串

#include <stdio.h>
int main(void)
{
  char *str  = "hello+world";
  char res[64] = { 0x00 };
  char res1[64] = { 0x00 };

  sscanf(str, "%[^+]+%s", res, res1);
  printf("res is: %s\r\nres1 is: %s\r\n", res, res1);
  return 0;
}

執行結果以下:

C語言庫函數篇1:sscanf用法

(2) 獲取遇到空格爲止的字符串

#include <stdio.h>
int main(void)
{
  char *str  = "hello world";
  char res[64] = { 0x00 };
  char res1[64] = { 0x00 };

  sscanf(str, "%[^ ] %s", res, res1);
  printf("res is: %s\r\nres1 is: %s\r\n", res, res1);
  return 0;
}

執行結果以下:

C語言庫函數篇1:sscanf用法

5.取指定字符集的字符串

#include <stdio.h>
int main(void)
{
  char *str  = "hello123456HELLO";
  char res[64] = { 0x00 };

  sscanf(str, "%[a-z1-9]", res);
  printf("res is: %s\r\n", res);
  return 0;
}

執行結果以下:

C語言庫函數篇1:sscanf用法

4、結語

本節完,實際操做過程當中須要注意的地方有以下幾點:

(1) %[^]只取到指定字符串,如繼續獲取以後字符串須要作處理,如上述第4小例。

C語言庫函數篇1:sscanf用法

這次執行不能正常獲取到"world"而獲取了「+world",就是因爲%[^]不取該字符,使用時候須要特別注意。

2.後記:

如您在使用過程當中有任何問題,請加QQ羣進一步交流,也能夠github提Issue。

QQ交流羣:906015840 (備註:物聯網項目交流)

github倉庫地址:https://github.com/solitary-sand/c

一葉孤沙出品:一沙一世界,一葉一菩提

wechat

相關文章
相關標籤/搜索