sscanf和sprintf函數的使用
首先這兩個函數是記憶體函數。
1.sscanf
參數及傳回類型
int sscanf( const char *buffer, const char *format [, argument ] ... );
我找到sscanf函數的10中用法:
#define _CRT_SECURE_NO_DEPRECATE 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static void sscanf_test(void)
{
int ret;
char *string;
int digit;
char buf1[];
char buf2[];
char buf3[];
char buf4[];
//1.最簡單的用法
string = "china beijing 123";
ret = sscanf(string, "%s %s %d", buf1, buf2, &digit);
printf("1.string=%s\n", string);
printf("1.ret=%d, buf1=%s, buf2=%s, digit=%d\n\n", ret, buf1, buf2, digit);
//
//執行結果:
//1.string=china beijing 123
//1.ret=3, buf1=china, buf2=beijing, digit=123
//可以看出,sscanf的傳回值是讀取的參數個數
//
//2.取指定長度的字元串
string = "123456789";
sscanf(string, "%5s", buf1);//把字元串string截取五位放在數組buf1中
printf("2.string=%s\n", string);
printf("2.buf1=%s\n\n", buf1);
//
//執行結果:
//2.string=123456789
//2.buf1=12345
//
//3.取到指定字元為止的字元串
string = "123456";
sscanf(string, "%[^4]", buf1);
printf("3.string=%s\n", string);
printf("3.buf1=%s\n\n", buf1);
//
//執行結果:
//3.string=123456
//3.buf1=123
//
//4.取到指定字元集為止的字元串
string = "123abcABC";
sscanf(string, "%[^A-Z]", buf1);
printf("4.string=%s\n", string);
printf("4.buf1=%s\n\n", buf1);
//
//執行結果:
//4.string=123abcABC
//4.buf1=123abc
//
//5.取僅包含指定字元集的字元串
string = "0123abcABC";
sscanf(string, "%[0-9]%[a-z]%[A-Z]", buf1, buf2, buf3);
printf("5.string=%s\n", string);
printf("5.buf1=%s, buf2=%s, buf3=%s\n\n", buf1, buf2, buf3);
//
//執行結果:
//5.string=012abcABC
//5.buf1=123, buf2=abc, buf3=ABC
//
//6.擷取指定字元中間的字元串
string = "ios<android>wp7";
sscanf(string, "%*[^<]<%[^>]", buf1);
printf("6.string=%s\n", string);
printf("6.buf1=%s\n\n", buf1);
//
//執行結果:
//6.string=ios<android>wp7
//6.buf1=android
//
//7.指定要跳過的字元串
string = "iosANDandroid";
sscanf(string, "%[a-z]AND%[a-z]", buf1, buf2);
printf("7.string=%s\n", string);
printf("7.buf1=%s, buf2=%s\n\n", buf1, buf2);
//
//執行結果:
//7.string=iosANDandroid
//7.buf1=ios, buf2=android
//
//8.分割以某字元隔開的字元串
string = "android-iphone-wp7";
//
//字元串取道'-'為止,後面還需要跟着分隔符'-',
//起到過濾作用,有點類似于第7點
//
sscanf(string, "%[^-]-%[^-]-%[^-]", buf1, buf2, buf3);
printf("8.string=%s\n", string);
printf("8.buf1=%s, buf2=%s, buf3=%s\n\n", buf1, buf2, buf3);
//
//執行結果:
//8.string=android-iphone-wp7
//8.buf1=android, buf2=iphone, buf3=wp7
//
//9.提取郵箱位址
string = "Email:[email protected]";
sscanf(string, "%[^:]:%[^@]@%[^.].%s", buf1, buf2, buf3, buf4);
printf("9.string=%s\n", string);
printf("9.buf1=%s, buf2=%s, buf3=%s, buf4=%s\n\n", buf1, buf2, buf3, buf4);
//
//執行結果:
//9.string = Email:[email protected]
//9.buf1=Email, buf2=beijing, buf3=sina, buf4=com.cn
//
//10.過濾掉不想截取或不需要的字元串--補充,
//在%号後面加一*号,代表過濾這個字元串,不讀取
//
string = "android iphone wp7";
sscanf(string, "%s %*s %s", buf1, buf2);
printf("10.string=%s\n", string);
printf("10.buf1=%s, buf2=%s\n\n", buf1, buf2);
//
//執行結果:
//10.string=android iphone wp7
//10.buf1=android, buf2=wp7
//
}
int main()
{
sscanf_test();
return ;
}
2.sprintf
在将各種類型的資料構造成字元串時,sprintf 的強大功能很少會讓你失望。sprintf 跟printf 在用法上幾乎一樣,隻是列印的目的地不同而已,前者列印到字元串中,後者則直接在指令行上輸出。這也導緻sprintf 比printf 有用得多。
(1)、定義
int sprintf( char *buffer, const char *format [, argument] ... );
sprintf 是個變參函數,除了前兩個參數類型固定外,後面可以接任意多個參數。而它的精華,顯然就在第二個參數。
(2)、用途
#define _CRT_SECURE_NO_DEPRECATE 1
#include "stdio.h"
void sprintf_test()
{
char s[];
//用途一
//sprintf 最常見的應用之一莫過于把整數列印到字元串中,是以spritnf在大多數場合可以替代itoa。
int a = ;
sprintf(s, "%d", );
printf("1.s=%s\n", s);
//執行結果
//1.s=123
//用途二
//連接配接字元串,sprintf 的格式控制串中既然可以插入各種東西,并最終把它們“連成一串”,
//自然也就能夠連接配接字元串,進而在許多場合可以替代strcat,但sprintf 能夠一次連接配接多個字元串
//(自然也可以同時在它們中間插入别的内容,總之非常靈活)。
//例如
char* arr1 = "I";
char* arr2 = "CSDN";
sprintf(s, "%s LOVE %s", arr1, arr2);
printf("2. s=%s\n", s);
//執行結果
//2. s=I LOVE CSDN
//用途三
//列印位址資訊
int i = ;
sprintf(s, "%p", &i);
printf("3. s=0X%X\n", s);
//執行結果
//3. s=0XF7FB2C
}
int main()
{
sprintf_test();
return ;
}
(3)、傳回值
//較少有人注意printf / sprintf 函數的傳回值,但有時它卻是有用的,spritnf 傳回了
//本次函數調用最終列印到字元緩沖區中的字元數目。也就是說每當一次sprintf函數調用結
//束以後,你無需再調一次strlen函數便已經知道字元串長度。如:
#define _CRT_SECURE_NO_DEPRECATE 1
#include "stdio.h"
void sprintf_test()
{
char s[];
char* arr = "asdff";
int len = sprintf(s, "%s", arr);//字元串長度
printf("%d\n", len);
}
void sprintf_test1()
{
char s[];
int i = ;
int len = sprintf(s, "%d", i);//計算整形700的長度
printf("%d\n", len);
}
int main()
{
sprintf_test();
sprintf_test1();
return ;
}
//運作結果
//5
//3