sprintf:将格式化的数据写入字符串,第一个参数是缓冲区buf。成功返回写字符的总数,失败返回一个负数
1.最简单用法:
char str[20];
sprintf(str,"%d",123);//%d指定将要被格式化的参数类型
printf("%s\n",str);
打印:123
2.指定打印宽度,不足左边补空格
char str[20];
sprintf(str,"%8d%8d",1234,5678);
printf("%s\n",str);
sprintf(str,"%-8d%-8d",1234,5678);//-就是左对齐
printf("%s\n",str);
打印: 1234 5678 //左边有4个空格
1234 5678 //左边无空格
3.控制浮点数的打印格式。%m.nf格式,其中m表示打印的宽度,n表示小数点后面的位数
char str[20];
sprintf(str,"%10.2f",3.1415926);
printf("%s\n",str);
sprintf(str,"%.4f",3.1415926);//不指定单位长度,只指定小数的位数
printf(str,"",3.1415926);
打印: 3.14 //一共10个单位的长度,但只保留2位小数,所以前面出现空格
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);//小数点后面的2表示从str1和str2取出的字符数
printf("%s\n",str);
没有小数点直接用2,则是指定打印宽度
sprintf(,str"%s%s",str1,str2);
printf("%s\n",str);
打印:pinghua
pihu
ping hua //前面很多空格
用*可以代替传入数字
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个位,不足的左边0补齐
5.sprintf函数的返回值是最终打印到缓冲区的字符数目,这里就不演示了
sscanf:从一个字符串读进与指定格式相符的数据。成功返回参数的数目,失败返回-1
char buf[20];
sscanf("123456","%s",buf);//将指定的字符串输入到buf中,只读字符串(只处理字符串)
printf("%s\n",buf);
打印:123456
1.取指定长度字符串
char buf[20];
sscanf("123456","%4d",buf);//4是指定长度。不要与sprintf的类似格式混淆
printf("%s\n",buf);
打印:1234
2.字符匹配, %[^a]匹配到a则停止匹配,正则表达式^表示字符串开始的位置。%[^a-z]表示到a-z之间的任意字母就结束匹配。%[a-z]表示匹配到a-z的任意字符。
假设每次buf都被清空
sscanf("12|34","%[^|]",buf);
printf("%s\n",buf);
sscanf("abc123","%[a-z]",buf);//匹配只能连续匹配,不能跳跃匹配。匹配只能从头开始.如:%[1-9],则会匹配为空。前面匹配不到后面就不会匹配
printf("%s\n",buf);
sscanf("12abc","%[^a-z]",buf);
printf("%s\n",buf);
分别打印:12
abc
12
3.指定要跳过的字符
sscanf("abKOcd","%[a-z]KO[a-z]",,buf,buf1);
printf("%s\n%s\n",buf,buf1);
打印:ab
cd
4.分割以某字符隔开的字符串,[]-[]之间的-是过滤-本身的,起过滤作用
sscanf("123-456","%[^-]-[^-]",buf,buf1);
printf("%s\n%s\n",buf,buf1);
打印:123
456
5.过滤不想截取或不需要的字符串
sscanf("abc 123 def","%s %*s %s",buf,buf1);
printf("%s\n%s\n",buf,buf1);
打印::abc
def
snprintf:最多从源串中拷贝n-1个字符到目标串中,然后末尾加\0。所以目标串的大小为n的话,将不会溢出。成功返回欲写入字符串的长度,出错返回负值