scanf(转自)
头文件:#include <stdio.h>
sscanf()函数用于从字符串中读取指定格式的数据,其原型如下:
int sscanf (char *str, char * format [, argument, ...]);
【参数】参数str为要读取数据的字符串;format为用户指定的格式;argument为变量,用来保存读取到的数据。
【返回值】成功则返回参数数目,失败则返回-1,错误原因存于errno 中。
sscanf()会将参数str 的字符串根据参数format(格式化字符串)来转换并格式化数据(格式化字符串请参考scanf()), 转换后的结果存于对应的变量中。
sscanf()与scanf()类似,都是用于输入的,只是scanf()以键盘(stdin)为输入源,sscanf()以固定字符串为输入源。
【实例】从指定的字符串中读取整数和小写字母。
- #include <stdio.h>
- int main(void)
- {
- char str[100] ="123568qwerSDDAE";
- char lowercase[100];
- int num;
- sscanf(str,"%d %[a-z]", &num, lowercase);
- printf("The number is: %d.\n", num);
- printf("The lowercase is: %s.", lowercase);
- return 0;
- }
The number is: 123568.
The lowercase is: qwer.
可以看到format参数有些类似正则表达式(当然没有正则表达式强大,复杂字符串建议使用正则表达式处理),支持集合操作,例如:
%[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
%[aB'] 匹配a、B、'中一员,贪婪性
%[^a] 匹配非a的任意字符,贪婪性
另外,format不仅可以用空格界定字符串,还可以用其他字符界定,可以实现简单的字符串分割(更加灵活的字符串分割请使用 strtok() )。例如:
sscanf("2006:03:18", "%d:%d:%d", a, b, c);
sscanf("2006:03:18 - 2006:04:18", "%s - %s", sztime1, sztime2);
sprintf(转自)
说明1:该函数包含在stdio.h的头文件中,使用时需要加入:#include
说明
2:sprintf与printf函数的区别:二者
功能相似,但是
sprintf函数打印到字符串中,而printf函数打印输出到屏幕上。
sprintf函数在我们完成其他数据类型转换成字符串类型的操作中应用广泛。
说明3:sprintf函数的格式:
int sprintf( char *buffer, const char *format [, argument,...] );
除了前两个参数固定外,可选参数可以是任意个。buffer是字符数组名;format是格式化字符串(像:"=%6.2f%#x%o",%与#合用时,自动在十六进制数前面加上0x)。只要在printf中可以使用的格式化字符串,在sprintf都可以使用。其中的格式化字符串是此函数的精华。
除了前两个参数固定外,可选参数可以是任意个。buffer是字符数组名;format是格式化字符串(像:"=%6.2f%#x%o",%与#合用时,自动在十六进制数前面加上0x)。只要在printf中可以使用的格式化字符串,在sprintf都可以使用。其中的格式化字符串是此函数的精华。
说明4:可以控制精度
char str[20];
double f=14.309948;
sprintf(str,"%6.2f",f);
说明5:可以将多个数值数据连接起来。
double
sprintf(str,"%6.2f",f);
说明5:可以将多个数值数据连接起来。
char str[20];
int a=20984,b=48090;
sprintf(str,"=m",a,b);
str[]="20984 48090"
说明6:可以将多个字符串连接成字符串
sprintf(str,"=m",a,b);
str[]="20984
说明6:可以将多个字符串连接成字符串
char str[20];
char s1={'A','B','C'};
char s2={'T','Y','x'};
sprintf(str,"%.3s%.3s",s1,s2);
%m.n在字符串的输出中,m表示宽度,字符串共占的列数;n表示实际的字符数。%m.n在浮点数中,m也表示宽度;n表示小数的位数。
char
char
sprintf(str,"%.3s%.3s",s1,s2);
%m.n在字符串的输出中,m表示宽度,字符串共占的列数;n表示实际的字符数。%m.n在浮点数中,m也表示宽度;n表示小数的位数。
说明7:可以动态指定,需要截取的字符数
char s1={'A','B','C'};
char s2={'T','Y','x'};
sprintf(str,"%.*s%.*s",2,s1,3,s2);
sprintf(s, "%*.*f", 10, 2, 3.1415926);
说明8:可以打印出i的地址: sprintf(s, "%p", &i);
相当于
sprintf(s, "%0*x", 2 * sizeof(void *), &i);
char
sprintf(str,"%.*s%.*s",2,s1,3,s2);
sprintf(s,
说明8:可以打印出i的地址: sprintf(s,
说明9:sprintf的返回值是字符数组中字符的个数,即字符串的长度,不用在调用strlen(s)求字符串的长度。