sprintf,sscanf,snprintf

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的话,将不会溢出。成功返回欲写入字符串的长度,出错返回负值


 

  

                    
 

 

                     
 


 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盼盼编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值