欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

sprintf,sscanf,snprintf

发布时间:2025/6/15 编程问答 34 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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的话,将不会溢出。成功返回欲写入字符串的长度,出错返回负值


 

  

                    
 

 

                     
 


 

 

 

总结

以上是生活随笔为你收集整理的sprintf,sscanf,snprintf的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。