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[255];
char buf2[255];
char buf3[255];
char buf4[255];
//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:beijing@sina.com.cn";
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:beijing@sina.com.cn
//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 0;
}
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[255];
//用途一
//sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以spritnf在大多数场合可以替代itoa。
int a = 123;
sprintf(s, "%d", 123);
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 = 2;
sprintf(s, "%p", &i);
printf("3. s=0X%X\n", s);
//执行结果
//3. s=0XF7FB2C
}
int main()
{
sprintf_test();
return 0;
}
(3)、返回值
//较少有人注意printf / sprintf 函数的返回值,但有时它却是有用的,spritnf 返回了
//本次函数调用最终打印到字符缓冲区中的字符数目。也就是说每当一次sprintf函数调用结
//束以后,你无需再调一次strlen函数便已经知道字符串长度。如:
#define _CRT_SECURE_NO_DEPRECATE 1
#include "stdio.h"
void sprintf_test()
{
char s[255];
char* arr = "asdff";
int len = sprintf(s, "%s", arr);//字符串长度
printf("%d\n", len);
}
void sprintf_test1()
{
char s[255];
int i = 700;
int len = sprintf(s, "%d", i);//计算整形700的长度
printf("%d\n", len);
}
int main()
{
sprintf_test();
sprintf_test1();
return 0;
}
//运行结果
//5
//3