日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

sprintf,sscanf,snprintf

發(fā)布時(shí)間:2025/6/15 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sprintf,sscanf,snprintf 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

sprintf:將格式化的數(shù)據(jù)寫入字符串,第一個(gè)參數(shù)是緩沖區(qū)buf。成功返回寫字符的總數(shù),失敗返回一個(gè)負(fù)數(shù)

1.最簡(jiǎn)單用法:

?

char str[20]; sprintf(str,"%d",123);//%d指定將要被格式化的參數(shù)類型 printf("%s\n",str);

打印:123

?

?

2.指定打印寬度,不足左邊補(bǔ)空格

?

char str[20]; sprintf(str,"%8d%8d",1234,5678); printf("%s\n",str); sprintf(str,"%-8d%-8d",1234,5678);//-就是左對(duì)齊 printf("%s\n",str);

打印: ? ?1234 ? ?5678 ? ? //左邊有4個(gè)空格
? ? ? ? ? 1234 ? ?5678 ? ? ? ? ?//左邊無(wú)空格

?

?

3.控制浮點(diǎn)數(shù)的打印格式。%m.nf格式,其中m表示打印的寬度,n表示小數(shù)點(diǎn)后面的位數(shù)

?

char str[20]; sprintf(str,"%10.2f",3.1415926); printf("%s\n",str); sprintf(str,"%.4f",3.1415926);//不指定單位長(zhǎng)度,只指定小數(shù)的位數(shù) printf(str,"",3.1415926);

打印: ? ? ? ? ? ?3.14 ? ? ? ? ?//一共10個(gè)單位的長(zhǎng)度,但只保留2位小數(shù),所以前面出現(xiàn)空格

?

? ? ? ? ?3.1416 ? ? ? ?
?

4.拼接字符串

?

char str[20]; char str1[20]="ping"; char str2[20]="hua";sprintf(str,"%s%s",str1,str2); printf("%s\n",str);sprintf(str,"%.2s%.2s",str1,str2);//小數(shù)點(diǎn)后面的2表示從str1和str2取出的字符數(shù) printf("%s\n",str);沒(méi)有小數(shù)點(diǎn)直接用2,則是指定打印寬度 sprintf(,str"%s%s",str1,str2); printf("%s\n",str);

打印:pinghua

?

? ? ? ? ? ? pihu

? ? ? ? ? ? ? ? ? ? ? ? ? ping ? ? ? ? ? ? ? ? ? ? ? ? ? hua ? ? ? ? //前面很多空格

用*可以代替?zhèn)魅霐?shù)字

?

sprintf(str,"%.*%.*s",2,str1,2str2); printf("%s\n",str);

打印:pihu
?

?

4.特定格式的填充

?

int main() {int a = 11;char buf[20] = "";sprintf(buf,"%010d",a);printf("%s\n",buf);return 0; }

打印:0000000011

?

總共10個(gè)位,不足的左邊0補(bǔ)齊
?

?

5.sprintf函數(shù)的返回值是最終打印到緩沖區(qū)的字符數(shù)目,這里就不演示了

?

sscanf:從一個(gè)字符串讀進(jìn)與指定格式相符的數(shù)據(jù)。成功返回參數(shù)的數(shù)目,失敗返回-1

char buf[20]; sscanf("123456","%s",buf);//將指定的字符串輸入到buf中,只讀字符串(只處理字符串) printf("%s\n",buf);

打印:123456

?

?

1.取指定長(zhǎng)度字符串

?

char buf[20]; sscanf("123456","%4d",buf);//4是指定長(zhǎng)度。不要與sprintf的類似格式混淆 printf("%s\n",buf);

打印:1234

?

?

2.字符匹配, %[^a]匹配到a則停止匹配,正則表達(dá)式^表示字符串開(kāi)始的位置。%[^a-z]表示到a-z之間的任意字母就結(jié)束匹配。%[a-z]表示匹配到a-z的任意字符。

假設(shè)每次buf都被清空

?

sscanf("12|34","%[^|]",buf); printf("%s\n",buf);sscanf("abc123","%[a-z]",buf);//匹配只能連續(xù)匹配,不能跳躍匹配。匹配只能從頭開(kāi)始.如:%[1-9],則會(huì)匹配為空。前面匹配不到后面就不會(huì)匹配 printf("%s\n",buf);sscanf("12abc","%[^a-z]",buf); printf("%s\n",buf);

分別打印:12

?

? ? ? ? ? ? ? ? ? ? abc

? ? ? ? ? ? ? ? ? ? 12 ? ? ? ? ? ? ? ? ?

?

3.指定要跳過(guò)的字符

?

sscanf("abKOcd","%[a-z]KO[a-z]",,buf,buf1); printf("%s\n%s\n",buf,buf1);

打印:ab

?

? ? ? ? ? ? cd

?

4.分割以某字符隔開(kāi)的字符串,[]-[]之間的-是過(guò)濾-本身的,起過(guò)濾作用

?

sscanf("123-456","%[^-]-[^-]",buf,buf1); printf("%s\n%s\n",buf,buf1);

打印:123

?

? ? ? ? ? ? 456
?

5.過(guò)濾不想截取或不需要的字符串

?

sscanf("abc 123 def","%s %*s %s",buf,buf1); printf("%s\n%s\n",buf,buf1);

打印::abc

?

? ? ? ? ? ? ?def

?

snprintf:最多從源串中拷貝n-1個(gè)字符到目標(biāo)串中,然后末尾加\0。所以目標(biāo)串的大小為n的話,將不會(huì)溢出。成功返回欲寫入字符串的長(zhǎng)度,出錯(cuò)返回負(fù)值


?

??

? ? ? ? ? ? ? ? ? ??
?

?

? ? ? ? ? ? ? ? ? ? ?
?


?

?

?

總結(jié)

以上是生活随笔為你收集整理的sprintf,sscanf,snprintf的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。