sscanf 和 sprintf

來源:互聯網
上載者:User

一 sscanf函數
int sscanf(const char *s,const char *format,..);
int scanf(const char *format,...);

sscanf與scanf等價,所不同的是,前者的輸入字元來源於字串s,而scanf以stdin作為輸入源。

1 %*d,%*s:*號表示此資料不讀入,忽略掉。
比如
ch="MemTotal:        2028248 kB"
sscanf(ch,"%*s%d",&total);
printf("%d/n",total);

輸出結果:2028248

2 取指定長度的字串
sscanf("123456 ", "%4s", buf);
printf("%s/n", buf);
  結果為:1234

3 取到指定字元為止的字串。如在下例中,取遇到空格為止字串。
  sscanf("123456 abcdedf", "%[^ ]", buf);
  printf("%s/n", buf);
  結果為:123456

4 sscanf(ch,"%*[^e]%[^2]",ch1);
尋找e到2之間的數,包括e但不包括2
如果中間有空格,包括空格。

5 給定一個字串““hello, world”,僅保留world。(注意:“,”之後有一空格)
  sscanf(“hello, world”, "%*s%s", buf);
  printf("%s/n", buf);
  結果為:world
  %*s表示第一個匹配到的%s被過濾掉,即hello被過濾了
  如果沒有空格則結果為NULL。

6 分割字串
sscanf("2006:03:18", "%d:%d:%d", a, b, c);

sscanf("2006:03:18 - 2006:04:18", "%s - %s", sztime1, sztime2);

如果2006:03:18 - 2006:04:18間沒有空格

sscanf("2006:03:18 - 2006:04:18", "%[0-9,:] - %[0-9,:]", sztime1, sztime2);

二 sprintf

- 負號時表示從後向前處理
0 表示空格填0
字元總寬度 小數點前面的數
精確度  小數點後面的數

1 把整數123 列印成一個字串儲存在s 中。
sprintf(s, "%d", 123); //產生"123"

2 sprintf(s, "%08X", 4567); //產生:"000011D7"

3 char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
  char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};
sprintf(s, "%.7s%.7s", a1, a2);//產生:"ABCDEFGHIJKLMN"
 
 這可以類比列印浮點數的”%m.nf”,在”%m.ns”中,m 表示佔用寬度(字串長度不足時補空格,超出了則按照實際寬度列印),n
才表示從相應的字串中最多取用的字元數。通常在列印字串時m 沒什麼大用,還是點號後面的n 用的多。自然,也可以前後都只取部分字元:
  sprintf(s, "%.6s%.5s", a1, a2);//產生:"ABCDEFHIJKL"

sprintf(s, "%.*s%.*s", 7, a1, 7, a2);
  或者:
  sprintf(s, "%.*s%.*s", sizeof(a1), a1, sizeof(a2), a2);

4 實際上,前面介紹的列印字元、整數、浮點數等都可以動態指定那些常量值,比如:
  sprintf(s, "%-*d", 4, 'A'); //產生"65 "
  sprintf(s, "%#0*X", 8, 128); //產生"0X000080","#"產生0X
  sprintf(s, "%*.*f", 10, 2, 3.1415926); //產生" 3.14"

5 sprintf(s, "%p", &i);

6 strlen 便已經知道了結果字串的長度。如:
  int len = sprintf(s, "%d", i);
  對於正整數來說,len 便等於整數i 的10 進位位元。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.